From e551a2902ef0264e3f2ba649ac590710bd7630d5 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Sun, 16 Feb 2025 20:43:29 -0500 Subject: [PATCH 01/11] feat: add registry initializer --- .../index.ts | 19 ++++++ .../input.ts | 65 +++++++++++++++++++ .../readme.md | 7 ++ 3 files changed, 91 insertions(+) create mode 100644 v3/scripts/20250221-balancer-registry-initializer/index.ts create mode 100644 v3/scripts/20250221-balancer-registry-initializer/input.ts create mode 100644 v3/scripts/20250221-balancer-registry-initializer/readme.md diff --git a/v3/scripts/20250221-balancer-registry-initializer/index.ts b/v3/scripts/20250221-balancer-registry-initializer/index.ts new file mode 100644 index 000000000..54428741b --- /dev/null +++ b/v3/scripts/20250221-balancer-registry-initializer/index.ts @@ -0,0 +1,19 @@ +import { Task, TaskRunOptions } from '@src'; +import { BalancerContractRegistryInitializerDeployment } from './input'; + +export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { + const input = task.input() as BalancerContractRegistryInitializerDeployment; + + const args = [ + input.Vault, + input.BalancerContractRegistry, + [input.RouterName, input.BatchRouterName, input.BufferRouterName, input.CompositeLiquidityRouterName], + [input.Router, input.BatchRouter, input.BufferRouter, input.CompositeLiquidityRouter], + [input.WeightedPoolName, input.StablePoolName, input.StableSurgePoolName], + [input.WeightedPoolFactory, input.StablePoolFactory, input.StableSurgePoolFactory], + [input.WeightedPoolAlias, input.StablePoolAlias], + [input.WeightedPoolFactory, input.StablePoolFactory], + ]; + + await task.deployAndVerify('BalancerContractRegistryInitializer', args, from, force); +}; diff --git a/v3/scripts/20250221-balancer-registry-initializer/input.ts b/v3/scripts/20250221-balancer-registry-initializer/input.ts new file mode 100644 index 000000000..e1017b926 --- /dev/null +++ b/v3/scripts/20250221-balancer-registry-initializer/input.ts @@ -0,0 +1,65 @@ +import { Task, TaskMode } from '@src'; + +export type BalancerContractRegistryInitializerDeployment = { + Vault: string; + BalancerContractRegistry: string; + RouterName: string; + Router: string; + BatchRouterName: string; + BatchRouter: string; + BufferRouterName: string; + BufferRouter: string; + CompositeLiquidityRouterName: string; + CompositeLiquidityRouter: string; + WeightedPoolName: string; + WeightedPoolFactory: string; + StablePoolName: string; + StablePoolFactory: string; + StableSurgePoolName: string; + StableSurgePoolFactory: string; + WeightedPoolAlias: string; + StablePoolAlias: string; +}; + +const RouterName = '20241205-v3-router'; +const BatchRouterName = '20241205-v3-batch-router'; +const BufferRouterName = '20241205-v3-buffer-router'; +const CompositeLiquidityRouterName = '20250123-v3-composite-liquidity-router-v2'; +const WeightedPoolName = '20241205-v3-weighted-pool'; +const StablePoolName = '20241205-v3-stable-pool'; +const StableSurgePoolName = '20250121-v3-stable-surge'; + +const Vault = new Task('20241204-v3-vault', TaskMode.READ_ONLY); +const BalancerContractRegistry = new Task('20250117-v3-contract-registry', TaskMode.READ_ONLY); + +const Router = new Task(RouterName, TaskMode.READ_ONLY); +const BatchRouter = new Task(BatchRouterName, TaskMode.READ_ONLY); +const BufferRouter = new Task(BufferRouterName, TaskMode.READ_ONLY); +const CompositeLiquidityRouter = new Task(CompositeLiquidityRouterName, TaskMode.READ_ONLY); +const WeightedPoolFactory = new Task(WeightedPoolName, TaskMode.READ_ONLY); +const StablePoolFactory = new Task(StablePoolName, TaskMode.READ_ONLY); +const StableSurgePoolFactory = new Task(StableSurgePoolName, TaskMode.READ_ONLY); + +const WeightedPoolAlias = 'WeightedPool'; +const StablePoolAlias = 'StablePool'; + +export default { + Vault, + BalancerContractRegistry, + RouterName, + Router, + BatchRouterName, + BatchRouter, + BufferRouterName, + BufferRouter, + CompositeLiquidityRouterName, + CompositeLiquidityRouter, + WeightedPoolName, + WeightedPoolFactory, + StablePoolName, + StablePoolFactory, + StableSurgePoolName, + StableSurgePoolFactory, + WeightedPoolAlias, + StablePoolAlias, +}; diff --git a/v3/scripts/20250221-balancer-registry-initializer/readme.md b/v3/scripts/20250221-balancer-registry-initializer/readme.md new file mode 100644 index 000000000..203373f2c --- /dev/null +++ b/v3/scripts/20250221-balancer-registry-initializer/readme.md @@ -0,0 +1,7 @@ +# 2025-02-21 - V3 Balancer Contract Registry Initializer + +Deployment of the `BalancerContractRegistryInitializer`, responsible for populating the registry with routers and pool factories (and initial aliases). + +## Useful Files + +- [`BalancerContractRegistryInitializer` artifact](./artifact/BalancerContractRegistryInitializer.json) From d97f50c48cf5ed678d5867f81854078a54a77b0a Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Sun, 16 Feb 2025 20:43:39 -0500 Subject: [PATCH 02/11] add artifacts --- .../BalancerContractRegistryInitializer.json | 92 +++++++++++++++++++ .../BalancerContractRegistryInitializer.json | 1 + 2 files changed, 93 insertions(+) create mode 100644 v3/scripts/20250221-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json create mode 100644 v3/scripts/20250221-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json diff --git a/v3/scripts/20250221-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json b/v3/scripts/20250221-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json new file mode 100644 index 000000000..bc7c96efc --- /dev/null +++ b/v3/scripts/20250221-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json @@ -0,0 +1,92 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BalancerContractRegistryInitializer", + "sourceName": "contracts/BalancerContractRegistryInitializer.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IBalancerContractRegistry", + "name": "_balancerContractRegistry", + "type": "address" + }, + { + "internalType": "string[]", + "name": "_routerNames", + "type": "string[]" + }, + { + "internalType": "address[]", + "name": "_routerAddresses", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "_poolFactoryNames", + "type": "string[]" + }, + { + "internalType": "address[]", + "name": "_poolFactoryAddresses", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "_aliasNames", + "type": "string[]" + }, + { + "internalType": "address[]", + "name": "_aliasAddresses", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AlreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "InputLengthMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "VaultMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "balancerContractRegistry", + "outputs": [ + { + "internalType": "contract IBalancerContractRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initializeBalancerContractRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c0604090808252346103b5576115c6803803809161001e8285610975565b8339810190610100818303126103b55761003781610998565b60208201516001600160a01b039391928482169290918381036103b557828701516001600160401b0381116103b557826100729185016109c3565b60608401516001600160401b0381116103b55783610091918601610a88565b60808501519091906001600160401b0381116103b557846100b39187016109c3565b60a08601519093906001600160401b0381116103b557856100d5918801610a88565b60c08701519095906001600160401b0381116103b557816100f79189016109c3565b60e088015190976001600160401b0382116103b55760049260209261011c9201610a88565b9861012a8551875190610b47565b6101378751895190610b47565b61014489518b5190610b47565b8c516311b2515f60e31b815292839182905afa90811561096b575f91610931575b5089808a169116036109225760805280519068010000000000000000821161040157600154826001558083106108a6575b5060015f9081525f5160206115a65f395f51905f5292916020015b82821061079f5750508251929150506001600160401b038211610401576801000000000000000082116104015760209060025483600255808410610783575b500160025f5260205f205f5b83811061076d575050505080519068010000000000000000821161040157600354826003558083106106f1575b5060035f9081525f5160206115865f395f51905f5292916020015b8282106105e05750508251929150506001600160401b0382116104015768010000000000000000821161040157602090600454836004558084106105c4575b500160045f5260205f205f5b8381106105ae57505050508051906801000000000000000082116104015760055482600555808310610532575b5060055f9081525f5160206115665f395f51905f5292916020015b8282106104155750508251929150506001600160401b0382116104015768010000000000000000821161040157602090600654836006558084106103e5575b5090849392910160065f5260205f205f5b8381106103cb5750505050602090600485518094819363aaabadc560e01b8352165afa9081156103c1575f91610382575b501660a05251610a089081610b5e823960805181818160b3015261083e015260a051816101830152f35b90506020813d6020116103b9575b8161039d60209383610975565b810103126103b5575181811681036103b5575f610358565b5f80fd5b3d9150610390565b83513d5f823e3d90fd5b825190951685820155859460209290920191600101610327565b6103fb9060065f5284845f209182019101610b31565b5f610316565b634e487b7160e01b5f52604160045260245ffd5b80518051906001600160401b038211610401576104328654610af9565b90601f918281116104fa575b50602091831160011461048e5792610474836001959460209487965f92610483575b50508160011b915f199060031b1c19161790565b87555b019401910190926102d7565b015190505f80610460565b90865f5260205f20915f5b601f19851681106104e2575083602093600196938796938794601f198116106104ca575b505050811b018755610477565b01515f1960f88460031b161c191690555f80806104bd565b91926020600181928685015181550194019201610499565b61052390885f5260205f208480870160051c82019260208810610529575b0160051c0190610b31565b5f61043e565b92508192610518565b60055f525f5160206115665f395f51905f529081019083015b81811061055857506102bc565b8061056560019254610af9565b80610572575b500161054b565b601f90818111841461058a5750505f81555b5f61056b565b6105a55f9284845260208420920160051c8201858301610b31565b81835555610584565b600190602089855116940193818401550161028f565b6105da9060045f5284845f209182019101610b31565b5f610283565b80518051906001600160401b038211610401576105fd8654610af9565b90601f918281116106b9575b50602091831160011461064d579261063e836001959460209487965f926104835750508160011b915f199060031b1c19161790565b87555b01940191019092610244565b90865f5260205f20915f5b601f19851681106106a1575083602093600196938796938794601f19811610610689575b505050811b018755610641565b01515f1960f88460031b161c191690555f808061067c565b91926020600181928685015181550194019201610658565b6106e290885f5260205f20600585808801821c830193602089106106e8575b01901c0190610b31565b5f610609565b935082936106d8565b60035f525f5160206115865f395f51905f529081019083015b8181106107175750610229565b8061072460019254610af9565b80610731575b500161070a565b601f9081811184146107495750505f81555b5f61072a565b6107645f9284845260208420920160051c8201858301610b31565b81835555610743565b60019060208b85511694019381840155016101fc565b6107999060025f5284845f209182019101610b31565b5f6101f0565b80518051906001600160401b038211610401576107bc8654610af9565b90601f91828111610878575b50602091831160011461080c57926107fd836001959460209487965f926104835750508160011b915f199060031b1c19161790565b87555b019401910190926101b1565b90865f5260205f20915f5b601f1985168110610860575083602093600196938796938794601f19811610610848575b505050811b018755610800565b01515f1960f88460031b161c191690555f808061083b565b91926020600181928685015181550194019201610817565b6108a090885f5260205f20600585808801821c830193602089106106e85701901c0190610b31565b5f6107c8565b60015f525f5160206115a65f395f51905f529081019083015b8181106108cc5750610196565b806108d960019254610af9565b806108e6575b50016108bf565b601f9081811184146108fe5750505f81555b5f6108df565b6109195f9284845260208420920160051c8201858301610b31565b818355556108f8565b63c1faacc560e01b5f5260045ffd5b90506020813d602011610963575b8161094c60209383610975565b810103126103b55761095d90610998565b5f610165565b3d915061093f565b8b513d5f823e3d90fd5b601f909101601f19168101906001600160401b0382119082101761040157604052565b51906001600160a01b03821682036103b557565b6001600160401b0381116104015760051b60200190565b601f9180601f830112156103b5578151916020926109e0816109ac565b946040936109f16040519788610975565b828752858088019360051b850101948186116103b557868501935b868510610a1e57505050505050505090565b84516001600160401b0391908281116103b55787019084603f830112156103b55789820151928311610401578351610a5e848801601f19168c0182610975565b838152858585850101116103b5575f8b858196888397018386015e83010152815201940193610a0c565b9080601f830112156103b557815190602091610aa3816109ac565b93610ab16040519586610975565b81855260208086019260051b8201019283116103b557602001905b828210610ada575050505090565b81516001600160a01b03811681036103b5578152908301908301610acc565b90600182811c92168015610b27575b6020831014610b1357565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610b08565b818110610b3c575050565b5f8155600101610b31565b03610b4e57565b63aaad13f760e01b5f5260045ffdfe6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea26469706673582212204c39ba673968bc422cef5a162adb229b4e53181cb83169db1195dd070115938064736f6c634300081b0033036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85bb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", + "deployedBytecode": "0x6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea26469706673582212204c39ba673968bc422cef5a162adb229b4e53181cb83169db1195dd070115938064736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/v3/scripts/20250221-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json b/v3/scripts/20250221-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json new file mode 100644 index 000000000..e0824c37f --- /dev/null +++ b/v3/scripts/20250221-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json @@ -0,0 +1 @@ +{"id":"d6ce1928928b603b11d26c0f6490ddc9","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Registered contracts must be one of these types.\nenum ContractType {\n OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case\n POOL_FACTORY,\n ROUTER,\n HOOK,\n ERC4626\n}\n\ninterface IBalancerContractRegistry {\n /**\n * @notice Store the state of a registered Balancer contract.\n * @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n * differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n * only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n * the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n * things that don't find into the standard types (e.g., helper contracts).\n *\n * @param contractType The type of contract (e.g., Router or Hook)\n * @param isRegistered This flag indicates whether there is an entry for the associated address\n * @param isActive If there is an entry, this flag indicates whether it is active or deprecated\n */\n struct ContractInfo {\n ContractType contractType;\n bool isRegistered;\n bool isActive;\n }\n\n /**\n * @notice Emitted when a new contract is registered.\n * @param contractType The type of contract being registered\n * @param contractName The name of the contract being registered\n * @param contractAddress The address of the contract being registered\n */\n event BalancerContractRegistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a new contract is deregistered (deleted).\n * @param contractType The type of contract being deregistered\n * @param contractName The name of the contract being deregistered\n * @param contractAddress The address of the contract being deregistered\n */\n event BalancerContractDeregistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a registered contract is deprecated.\n * @dev This sets the `isActive` flag to false.\n * @param contractAddress The address of the contract being deprecated\n */\n event BalancerContractDeprecated(address indexed contractAddress);\n\n /**\n * @notice Emitted when an alias is added or updated.\n * @param contractAlias The alias name\n * @param contractAddress The address of the contract being deprecated\n */\n event ContractAliasUpdated(string indexed contractAlias, address indexed contractAddress);\n\n /**\n * @notice A contract has already been registered under the given address.\n * @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n * to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n * name => address => state mapping.\n *\n * @param contractType The contract type, provided for documentation purposes\n * @param contractAddress The address of the previously registered contract\n */\n error ContractAddressAlreadyRegistered(ContractType contractType, address contractAddress);\n\n /**\n * @notice A contract has already been registered under the given name.\n * @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n * different types, or the same name and different addresses.\n *\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract\n */\n error ContractNameAlreadyRegistered(ContractType contractType, string contractName);\n\n /**\n * @notice The proposed contract name has already been added as an alias.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractName The name of the previously registered contract\n * @param contractAddress The address of the previously registered contract\n */\n error ContractNameInUseAsAlias(string contractName, address contractAddress);\n\n /**\n * @notice The proposed alias has already been registered as a contract.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract (and proposed alias)\n */\n error ContractAliasInUseAsName(ContractType contractType, string contractName);\n\n /**\n * @notice Thrown when attempting to deregister a contract that was not previously registered.\n * @param contractName The name of the unregistered contract\n */\n error ContractNameNotRegistered(string contractName);\n\n /**\n * @notice An operation that requires a valid contract specified an unrecognized address.\n * @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n * registered contract.\n *\n * @param contractAddress The address of the contract that was not registered\n */\n error ContractAddressNotRegistered(address contractAddress);\n\n /**\n * @notice Contracts can only be deprecated once.\n * @param contractAddress The address of the previously deprecated contract\n */\n error ContractAlreadyDeprecated(address contractAddress);\n\n /// @notice Cannot register or deprecate contracts, or add an alias targeting the zero address.\n error ZeroContractAddress();\n\n /// @notice Cannot register (or deregister) a contract with an empty string as a name.\n error InvalidContractName();\n\n /// @notice Cannot add an empty string as an alias.\n error InvalidContractAlias();\n\n /**\n * @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n * (not blank). Governance must ensure this is called with valid information. Emits the\n * `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n * already in use.\n *\n * @param contractType The type of contract being registered\n * @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n * @param contractAddress The address of the contract\n */\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external;\n\n /**\n * @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n * If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n * it, and register it again with the correct data. It must start with the name, as this is the registry key,\n * required for complete deletion.\n *\n * Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n * inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n * the correct address.\n *\n * @param contractName The name of the contract being deprecated (cannot be an alias)\n */\n function deregisterBalancerContract(string memory contractName) external;\n\n /**\n * @notice Deprecate an official Balancer contract.\n * @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n * address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n * enforced unique, so either the name or address could be specified in principle.\n *\n * @param contractAddress The address of the contract being deprecated\n */\n function deprecateBalancerContract(address contractAddress) external;\n\n /**\n * @notice Add an alias for a registered contract.\n * @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n * `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n * need to track specific versions. Once added, an alias can also be updated to point to a different address\n * (e.g., when migrating from the v2 to the v3 weighted pool).\n *\n * @param contractAlias An alternate name that can be used to fetch a contract address\n * @param existingContract The target address of the contract alias\n */\n function addOrUpdateBalancerContractAlias(string memory contractAlias, address existingContract) external;\n\n /**\n * @notice Determine whether an address is an official contract of the specified type.\n * @param contractType The type of contract\n * @param contractAddress The address of the contract\n * @return isActive True if the given address is a registered and active contract of the specified type\n */\n function isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) external view returns (bool isActive);\n\n /**\n * @notice Look up a registered contract by type and name.\n * @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n * (e.g., `WeightedPool`).\n *\n * @param contractType The type of the contract\n * @param contractName The name of the contract\n * @return contractAddress The address of the associated contract, if registered, or zero\n * @return isActive True if the contract was registered and not deprecated\n */\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive);\n\n /**\n * @notice Look up complete information about a registered contract by address.\n * @param contractAddress The address of the associated contract\n * @return info ContractInfo struct corresponding to the address\n */\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info);\n\n /// @notice Returns `true` if the given address is an active contract under the ROUTER type.\n function isTrustedRouter(address router) external view returns (bool);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is Authentication {\n IVault private immutable _vault;\n\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) Authentication(bytes32(uint256(uint160(address(this))))) {\n _vault = vault;\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n\n function _canPerform(bytes32 actionId, address account) internal view override returns (bool) {\n return getAuthorizer().canPerform(actionId, account, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return getAuthorizer().canPerform(actionId, account, where);\n }\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"contracts/BalancerContractRegistryInitializer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\n\nimport { IBasicAuthorizer } from \"./IBasicAuthorizer.sol\";\n\n// Associated with `20250221-balancer-registry-initializer`.\ncontract BalancerContractRegistryInitializer {\n IBalancerContractRegistry public immutable balancerContractRegistry;\n\n // IAuthorizer with interface for granting/revoking roles.\n IBasicAuthorizer internal immutable _authorizer;\n\n // Set to true when operation is complete.\n bool private _initialized;\n\n string[] private routerNames;\n address[] private routerAddresses;\n\n string[] private poolFactoryNames;\n address[] private poolFactoryAddresses;\n\n string[] private aliasNames;\n address[] private aliasAddresses;\n\n /// @notice The initialization can only be done once.\n error AlreadyInitialized();\n\n /// @notice The Vault passed in as a sanity check doesn't match the Vault associated with the registry.\n error VaultMismatch();\n\n constructor(\n IVault vault,\n IBalancerContractRegistry _balancerContractRegistry,\n string[] memory _routerNames,\n address[] memory _routerAddresses,\n string[] memory _poolFactoryNames,\n address[] memory _poolFactoryAddresses,\n string[] memory _aliasNames,\n address[] memory _aliasAddresses\n ) {\n InputHelpers.ensureInputLengthMatch(_routerNames.length, _routerAddresses.length);\n InputHelpers.ensureInputLengthMatch(_poolFactoryNames.length, _poolFactoryAddresses.length);\n InputHelpers.ensureInputLengthMatch(_aliasNames.length, _aliasAddresses.length);\n\n // Extract the Vault (also indirectly verifying the registry contract is valid).\n IVault registryVault = SingletonAuthentication(address(_balancerContractRegistry)).getVault();\n if (registryVault != vault) {\n revert VaultMismatch();\n }\n\n balancerContractRegistry = _balancerContractRegistry;\n\n routerNames = _routerNames;\n routerAddresses = _routerAddresses;\n poolFactoryNames = _poolFactoryNames;\n poolFactoryAddresses = _poolFactoryAddresses;\n aliasNames = _aliasNames;\n aliasAddresses = _aliasAddresses;\n\n _authorizer = IBasicAuthorizer(address(vault.getAuthorizer()));\n }\n\n function initializeBalancerContractRegistry() external {\n // Explicitly ensure this can only be called once.\n if (_initialized) {\n revert AlreadyInitialized();\n }\n\n _initialized = true;\n\n // Grant permissions to register contracts and add aliases.\n bytes32 registerContractRole = IAuthentication(address(balancerContractRegistry)).getActionId(\n IBalancerContractRegistry.registerBalancerContract.selector\n );\n bytes32 addAliasRole = IAuthentication(address(balancerContractRegistry)).getActionId(\n IBalancerContractRegistry.addOrUpdateBalancerContractAlias.selector\n );\n\n _authorizer.grantRole(registerContractRole, address(this));\n _authorizer.grantRole(addAliasRole, address(this));\n\n // Add Routers.\n for (uint256 i = 0; i < routerNames.length; ++i) {\n balancerContractRegistry.registerBalancerContract(ContractType.ROUTER, routerNames[i], routerAddresses[i]);\n }\n\n // Add Pool Factories.\n for (uint256 i = 0; i < poolFactoryNames.length; ++i) {\n balancerContractRegistry.registerBalancerContract(\n ContractType.POOL_FACTORY,\n poolFactoryNames[i],\n poolFactoryAddresses[i]\n );\n }\n\n // Add (pool factory) aliases.\n for (uint256 i = 0; i < aliasNames.length; ++i) {\n balancerContractRegistry.addOrUpdateBalancerContractAlias(aliasNames[i], aliasAddresses[i]);\n }\n\n // Renounce all roles.\n _authorizer.renounceRole(registerContractRole, address(this));\n _authorizer.renounceRole(addAliasRole, address(this));\n\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n}\n"},"contracts/IBasicAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\n\ninterface IBasicAuthorizer is IAuthorizer {\n // solhint-disable-next-line func-name-mixedcase\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[14]},"id":15,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"72:77:0","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":14,"linearizedBaseContracts":[14],"name":"IAuthentication","nameLocation":"159:15:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"181:67:0","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":5,"name":"SenderNotAllowed","nameLocation":"259:16:0","nodeType":"ErrorDefinition","parameters":{"id":4,"nodeType":"ParameterList","parameters":[],"src":"275:2:0"},"src":"253:25:0"},{"documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"284:237:0","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":13,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:0","nodeType":"FunctionDefinition","parameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"selector","nameLocation":"554:8:0","nodeType":"VariableDeclaration","scope":13,"src":"547:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":7,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:0"},"returnParameters":{"id":12,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11,"mutability":"mutable","name":"actionId","nameLocation":"595:8:0","nodeType":"VariableDeclaration","scope":13,"src":"587:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:0"},"scope":14,"src":"526:79:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":15,"src":"149:458:0","usedErrors":[5],"usedEvents":[]}],"src":"46:562:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[24]},"id":25,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"72:56:1","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":24,"linearizedBaseContracts":[24],"name":"IRateProvider","nameLocation":"138:13:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":18,"nodeType":"StructuredDocumentation","src":"158:573:1","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":23,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:1","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[],"src":"752:2:1"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"rate","nameLocation":"786:4:1","nodeType":"VariableDeclaration","scope":23,"src":"778:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:1"},"scope":24,"src":"736:56:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":25,"src":"128:666:1","usedErrors":[],"usedEvents":[]}],"src":"46:749:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","exportedSymbols":{"ContractType":[33],"IBalancerContractRegistry":[202]},"id":203,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":26,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"canonicalName":"ContractType","documentation":{"id":27,"nodeType":"StructuredDocumentation","src":"72:61:2","text":"@notice Registered contracts must be one of these types."},"id":33,"members":[{"id":28,"name":"OTHER","nameLocation":"157:5:2","nodeType":"EnumValue","src":"157:5:2"},{"id":29,"name":"POOL_FACTORY","nameLocation":"255:12:2","nodeType":"EnumValue","src":"255:12:2"},{"id":30,"name":"ROUTER","nameLocation":"273:6:2","nodeType":"EnumValue","src":"273:6:2"},{"id":31,"name":"HOOK","nameLocation":"285:4:2","nodeType":"EnumValue","src":"285:4:2"},{"id":32,"name":"ERC4626","nameLocation":"295:7:2","nodeType":"EnumValue","src":"295:7:2"}],"name":"ContractType","nameLocation":"138:12:2","nodeType":"EnumDefinition","src":"133:171:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IBalancerContractRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":202,"linearizedBaseContracts":[202],"name":"IBalancerContractRegistry","nameLocation":"316:25:2","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerContractRegistry.ContractInfo","documentation":{"id":34,"nodeType":"StructuredDocumentation","src":"348:887:2","text":" @notice Store the state of a registered Balancer contract.\n @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n things that don't find into the standard types (e.g., helper contracts).\n @param contractType The type of contract (e.g., Router or Hook)\n @param isRegistered This flag indicates whether there is an entry for the associated address\n @param isActive If there is an entry, this flag indicates whether it is active or deprecated"},"id":42,"members":[{"constant":false,"id":37,"mutability":"mutable","name":"contractType","nameLocation":"1283:12:2","nodeType":"VariableDeclaration","scope":42,"src":"1270:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":36,"nodeType":"UserDefinedTypeName","pathNode":{"id":35,"name":"ContractType","nameLocations":["1270:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"1270:12:2"},"referencedDeclaration":33,"src":"1270:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":39,"mutability":"mutable","name":"isRegistered","nameLocation":"1310:12:2","nodeType":"VariableDeclaration","scope":42,"src":"1305:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38,"name":"bool","nodeType":"ElementaryTypeName","src":"1305:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":41,"mutability":"mutable","name":"isActive","nameLocation":"1337:8:2","nodeType":"VariableDeclaration","scope":42,"src":"1332:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40,"name":"bool","nodeType":"ElementaryTypeName","src":"1332:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContractInfo","nameLocation":"1247:12:2","nodeType":"StructDefinition","scope":202,"src":"1240:112:2","visibility":"public"},{"anonymous":false,"documentation":{"id":43,"nodeType":"StructuredDocumentation","src":"1358:278:2","text":" @notice Emitted when a new contract is registered.\n @param contractType The type of contract being registered\n @param contractName The name of the contract being registered\n @param contractAddress The address of the contract being registered"},"eventSelector":"b12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e2","id":52,"name":"BalancerContractRegistered","nameLocation":"1647:26:2","nodeType":"EventDefinition","parameters":{"id":51,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"1704:12:2","nodeType":"VariableDeclaration","scope":52,"src":"1683:33:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":45,"nodeType":"UserDefinedTypeName","pathNode":{"id":44,"name":"ContractType","nameLocations":["1683:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"1683:12:2"},"referencedDeclaration":33,"src":"1683:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":48,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"1741:12:2","nodeType":"VariableDeclaration","scope":52,"src":"1726:27:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":50,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"1779:15:2","nodeType":"VariableDeclaration","scope":52,"src":"1763:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1673:127:2"},"src":"1641:160:2"},{"anonymous":false,"documentation":{"id":53,"nodeType":"StructuredDocumentation","src":"1807:296:2","text":" @notice Emitted when a new contract is deregistered (deleted).\n @param contractType The type of contract being deregistered\n @param contractName The name of the contract being deregistered\n @param contractAddress The address of the contract being deregistered"},"eventSelector":"fa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c","id":62,"name":"BalancerContractDeregistered","nameLocation":"2114:28:2","nodeType":"EventDefinition","parameters":{"id":61,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"2173:12:2","nodeType":"VariableDeclaration","scope":62,"src":"2152:33:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":55,"nodeType":"UserDefinedTypeName","pathNode":{"id":54,"name":"ContractType","nameLocations":["2152:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"2152:12:2"},"referencedDeclaration":33,"src":"2152:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":58,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"2210:12:2","nodeType":"VariableDeclaration","scope":62,"src":"2195:27:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":57,"name":"string","nodeType":"ElementaryTypeName","src":"2195:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":60,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2248:15:2","nodeType":"VariableDeclaration","scope":62,"src":"2232:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59,"name":"address","nodeType":"ElementaryTypeName","src":"2232:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2142:127:2"},"src":"2108:162:2"},{"anonymous":false,"documentation":{"id":63,"nodeType":"StructuredDocumentation","src":"2276:203:2","text":" @notice Emitted when a registered contract is deprecated.\n @dev This sets the `isActive` flag to false.\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b","id":67,"name":"BalancerContractDeprecated","nameLocation":"2490:26:2","nodeType":"EventDefinition","parameters":{"id":66,"nodeType":"ParameterList","parameters":[{"constant":false,"id":65,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2533:15:2","nodeType":"VariableDeclaration","scope":67,"src":"2517:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64,"name":"address","nodeType":"ElementaryTypeName","src":"2517:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2516:33:2"},"src":"2484:66:2"},{"anonymous":false,"documentation":{"id":68,"nodeType":"StructuredDocumentation","src":"2556:187:2","text":" @notice Emitted when an alias is added or updated.\n @param contractAlias The alias name\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e573058465483","id":74,"name":"ContractAliasUpdated","nameLocation":"2754:20:2","nodeType":"EventDefinition","parameters":{"id":73,"nodeType":"ParameterList","parameters":[{"constant":false,"id":70,"indexed":true,"mutability":"mutable","name":"contractAlias","nameLocation":"2790:13:2","nodeType":"VariableDeclaration","scope":74,"src":"2775:28:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":69,"name":"string","nodeType":"ElementaryTypeName","src":"2775:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":72,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2821:15:2","nodeType":"VariableDeclaration","scope":74,"src":"2805:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":71,"name":"address","nodeType":"ElementaryTypeName","src":"2805:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2774:63:2"},"src":"2748:90:2"},{"documentation":{"id":75,"nodeType":"StructuredDocumentation","src":"2844:531:2","text":" @notice A contract has already been registered under the given address.\n @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n name => address => state mapping.\n @param contractType The contract type, provided for documentation purposes\n @param contractAddress The address of the previously registered contract"},"errorSelector":"25a14e0c","id":82,"name":"ContractAddressAlreadyRegistered","nameLocation":"3386:32:2","nodeType":"ErrorDefinition","parameters":{"id":81,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78,"mutability":"mutable","name":"contractType","nameLocation":"3432:12:2","nodeType":"VariableDeclaration","scope":82,"src":"3419:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":77,"nodeType":"UserDefinedTypeName","pathNode":{"id":76,"name":"ContractType","nameLocations":["3419:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"3419:12:2"},"referencedDeclaration":33,"src":"3419:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":80,"mutability":"mutable","name":"contractAddress","nameLocation":"3454:15:2","nodeType":"VariableDeclaration","scope":82,"src":"3446:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3418:52:2"},"src":"3380:91:2"},{"documentation":{"id":83,"nodeType":"StructuredDocumentation","src":"3477:439:2","text":" @notice A contract has already been registered under the given name.\n @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n different types, or the same name and different addresses.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract"},"errorSelector":"a1e69ed3","id":90,"name":"ContractNameAlreadyRegistered","nameLocation":"3927:29:2","nodeType":"ErrorDefinition","parameters":{"id":89,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86,"mutability":"mutable","name":"contractType","nameLocation":"3970:12:2","nodeType":"VariableDeclaration","scope":90,"src":"3957:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":85,"nodeType":"UserDefinedTypeName","pathNode":{"id":84,"name":"ContractType","nameLocations":["3957:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"3957:12:2"},"referencedDeclaration":33,"src":"3957:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":88,"mutability":"mutable","name":"contractName","nameLocation":"3991:12:2","nodeType":"VariableDeclaration","scope":90,"src":"3984:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":87,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3956:48:2"},"src":"3921:84:2"},{"documentation":{"id":91,"nodeType":"StructuredDocumentation","src":"4011:338:2","text":" @notice The proposed contract name has already been added as an alias.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractName The name of the previously registered contract\n @param contractAddress The address of the previously registered contract"},"errorSelector":"6d4f9990","id":97,"name":"ContractNameInUseAsAlias","nameLocation":"4360:24:2","nodeType":"ErrorDefinition","parameters":{"id":96,"nodeType":"ParameterList","parameters":[{"constant":false,"id":93,"mutability":"mutable","name":"contractName","nameLocation":"4392:12:2","nodeType":"VariableDeclaration","scope":97,"src":"4385:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":92,"name":"string","nodeType":"ElementaryTypeName","src":"4385:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":95,"mutability":"mutable","name":"contractAddress","nameLocation":"4414:15:2","nodeType":"VariableDeclaration","scope":97,"src":"4406:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":94,"name":"address","nodeType":"ElementaryTypeName","src":"4406:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4384:46:2"},"src":"4354:77:2"},{"documentation":{"id":98,"nodeType":"StructuredDocumentation","src":"4437:371:2","text":" @notice The proposed alias has already been registered as a contract.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract (and proposed alias)"},"errorSelector":"4466cf0c","id":105,"name":"ContractAliasInUseAsName","nameLocation":"4819:24:2","nodeType":"ErrorDefinition","parameters":{"id":104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":101,"mutability":"mutable","name":"contractType","nameLocation":"4857:12:2","nodeType":"VariableDeclaration","scope":105,"src":"4844:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":100,"nodeType":"UserDefinedTypeName","pathNode":{"id":99,"name":"ContractType","nameLocations":["4844:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"4844:12:2"},"referencedDeclaration":33,"src":"4844:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":103,"mutability":"mutable","name":"contractName","nameLocation":"4878:12:2","nodeType":"VariableDeclaration","scope":105,"src":"4871:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":102,"name":"string","nodeType":"ElementaryTypeName","src":"4871:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4843:48:2"},"src":"4813:79:2"},{"documentation":{"id":106,"nodeType":"StructuredDocumentation","src":"4898:175:2","text":" @notice Thrown when attempting to deregister a contract that was not previously registered.\n @param contractName The name of the unregistered contract"},"errorSelector":"cd3599f9","id":110,"name":"ContractNameNotRegistered","nameLocation":"5084:25:2","nodeType":"ErrorDefinition","parameters":{"id":109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":108,"mutability":"mutable","name":"contractName","nameLocation":"5117:12:2","nodeType":"VariableDeclaration","scope":110,"src":"5110:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":107,"name":"string","nodeType":"ElementaryTypeName","src":"5110:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5109:21:2"},"src":"5078:53:2"},{"documentation":{"id":111,"nodeType":"StructuredDocumentation","src":"5137:329:2","text":" @notice An operation that requires a valid contract specified an unrecognized address.\n @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n registered contract.\n @param contractAddress The address of the contract that was not registered"},"errorSelector":"f5b5d364","id":115,"name":"ContractAddressNotRegistered","nameLocation":"5477:28:2","nodeType":"ErrorDefinition","parameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"mutability":"mutable","name":"contractAddress","nameLocation":"5514:15:2","nodeType":"VariableDeclaration","scope":115,"src":"5506:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":112,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5505:25:2"},"src":"5471:60:2"},{"documentation":{"id":116,"nodeType":"StructuredDocumentation","src":"5537:145:2","text":" @notice Contracts can only be deprecated once.\n @param contractAddress The address of the previously deprecated contract"},"errorSelector":"1f118c35","id":120,"name":"ContractAlreadyDeprecated","nameLocation":"5693:25:2","nodeType":"ErrorDefinition","parameters":{"id":119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"mutability":"mutable","name":"contractAddress","nameLocation":"5727:15:2","nodeType":"VariableDeclaration","scope":120,"src":"5719:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117,"name":"address","nodeType":"ElementaryTypeName","src":"5719:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5718:25:2"},"src":"5687:57:2"},{"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"5750:95:2","text":"@notice Cannot register or deprecate contracts, or add an alias targeting the zero address."},"errorSelector":"b4d92c53","id":123,"name":"ZeroContractAddress","nameLocation":"5856:19:2","nodeType":"ErrorDefinition","parameters":{"id":122,"nodeType":"ParameterList","parameters":[],"src":"5875:2:2"},"src":"5850:28:2"},{"documentation":{"id":124,"nodeType":"StructuredDocumentation","src":"5884:86:2","text":"@notice Cannot register (or deregister) a contract with an empty string as a name."},"errorSelector":"830c907e","id":126,"name":"InvalidContractName","nameLocation":"5981:19:2","nodeType":"ErrorDefinition","parameters":{"id":125,"nodeType":"ParameterList","parameters":[],"src":"6000:2:2"},"src":"5975:28:2"},{"documentation":{"id":127,"nodeType":"StructuredDocumentation","src":"6009:51:2","text":"@notice Cannot add an empty string as an alias."},"errorSelector":"907f9fd9","id":129,"name":"InvalidContractAlias","nameLocation":"6071:20:2","nodeType":"ErrorDefinition","parameters":{"id":128,"nodeType":"ParameterList","parameters":[],"src":"6091:2:2"},"src":"6065:29:2"},{"documentation":{"id":130,"nodeType":"StructuredDocumentation","src":"6100:711:2","text":" @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n (not blank). Governance must ensure this is called with valid information. Emits the\n `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n already in use.\n @param contractType The type of contract being registered\n @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n @param contractAddress The address of the contract"},"functionSelector":"e0376ab4","id":140,"implemented":false,"kind":"function","modifiers":[],"name":"registerBalancerContract","nameLocation":"6825:24:2","nodeType":"FunctionDefinition","parameters":{"id":138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133,"mutability":"mutable","name":"contractType","nameLocation":"6872:12:2","nodeType":"VariableDeclaration","scope":140,"src":"6859:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":132,"nodeType":"UserDefinedTypeName","pathNode":{"id":131,"name":"ContractType","nameLocations":["6859:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"6859:12:2"},"referencedDeclaration":33,"src":"6859:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":135,"mutability":"mutable","name":"contractName","nameLocation":"6908:12:2","nodeType":"VariableDeclaration","scope":140,"src":"6894:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134,"name":"string","nodeType":"ElementaryTypeName","src":"6894:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":137,"mutability":"mutable","name":"contractAddress","nameLocation":"6938:15:2","nodeType":"VariableDeclaration","scope":140,"src":"6930:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":136,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6849:110:2"},"returnParameters":{"id":139,"nodeType":"ParameterList","parameters":[],"src":"6968:0:2"},"scope":202,"src":"6816:153:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":141,"nodeType":"StructuredDocumentation","src":"6975:878:2","text":" @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n it, and register it again with the correct data. It must start with the name, as this is the registry key,\n required for complete deletion.\n Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n the correct address.\n @param contractName The name of the contract being deprecated (cannot be an alias)"},"functionSelector":"c7f90793","id":146,"implemented":false,"kind":"function","modifiers":[],"name":"deregisterBalancerContract","nameLocation":"7867:26:2","nodeType":"FunctionDefinition","parameters":{"id":144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":143,"mutability":"mutable","name":"contractName","nameLocation":"7908:12:2","nodeType":"VariableDeclaration","scope":146,"src":"7894:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":142,"name":"string","nodeType":"ElementaryTypeName","src":"7894:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7893:28:2"},"returnParameters":{"id":145,"nodeType":"ParameterList","parameters":[],"src":"7930:0:2"},"scope":202,"src":"7858:73:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":147,"nodeType":"StructuredDocumentation","src":"7937:472:2","text":" @notice Deprecate an official Balancer contract.\n @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n enforced unique, so either the name or address could be specified in principle.\n @param contractAddress The address of the contract being deprecated"},"functionSelector":"44969a9c","id":152,"implemented":false,"kind":"function","modifiers":[],"name":"deprecateBalancerContract","nameLocation":"8423:25:2","nodeType":"FunctionDefinition","parameters":{"id":150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":149,"mutability":"mutable","name":"contractAddress","nameLocation":"8457:15:2","nodeType":"VariableDeclaration","scope":152,"src":"8449:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":148,"name":"address","nodeType":"ElementaryTypeName","src":"8449:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8448:25:2"},"returnParameters":{"id":151,"nodeType":"ParameterList","parameters":[],"src":"8482:0:2"},"scope":202,"src":"8414:69:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":153,"nodeType":"StructuredDocumentation","src":"8489:650:2","text":" @notice Add an alias for a registered contract.\n @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n need to track specific versions. Once added, an alias can also be updated to point to a different address\n (e.g., when migrating from the v2 to the v3 weighted pool).\n @param contractAlias An alternate name that can be used to fetch a contract address\n @param existingContract The target address of the contract alias"},"functionSelector":"2967af96","id":160,"implemented":false,"kind":"function","modifiers":[],"name":"addOrUpdateBalancerContractAlias","nameLocation":"9153:32:2","nodeType":"FunctionDefinition","parameters":{"id":158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":155,"mutability":"mutable","name":"contractAlias","nameLocation":"9200:13:2","nodeType":"VariableDeclaration","scope":160,"src":"9186:27:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":154,"name":"string","nodeType":"ElementaryTypeName","src":"9186:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":157,"mutability":"mutable","name":"existingContract","nameLocation":"9223:16:2","nodeType":"VariableDeclaration","scope":160,"src":"9215:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":156,"name":"address","nodeType":"ElementaryTypeName","src":"9215:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9185:55:2"},"returnParameters":{"id":159,"nodeType":"ParameterList","parameters":[],"src":"9249:0:2"},"scope":202,"src":"9144:106:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":161,"nodeType":"StructuredDocumentation","src":"9256:316:2","text":" @notice Determine whether an address is an official contract of the specified type.\n @param contractType The type of contract\n @param contractAddress The address of the contract\n @return isActive True if the given address is a registered and active contract of the specified type"},"functionSelector":"ae2733a4","id":171,"implemented":false,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"9586:24:2","nodeType":"FunctionDefinition","parameters":{"id":167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":164,"mutability":"mutable","name":"contractType","nameLocation":"9633:12:2","nodeType":"VariableDeclaration","scope":171,"src":"9620:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":163,"nodeType":"UserDefinedTypeName","pathNode":{"id":162,"name":"ContractType","nameLocations":["9620:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"9620:12:2"},"referencedDeclaration":33,"src":"9620:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":166,"mutability":"mutable","name":"contractAddress","nameLocation":"9663:15:2","nodeType":"VariableDeclaration","scope":171,"src":"9655:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":165,"name":"address","nodeType":"ElementaryTypeName","src":"9655:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9610:74:2"},"returnParameters":{"id":170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":169,"mutability":"mutable","name":"isActive","nameLocation":"9713:8:2","nodeType":"VariableDeclaration","scope":171,"src":"9708:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":168,"name":"bool","nodeType":"ElementaryTypeName","src":"9708:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9707:15:2"},"scope":202,"src":"9577:146:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":172,"nodeType":"StructuredDocumentation","src":"9729:496:2","text":" @notice Look up a registered contract by type and name.\n @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n (e.g., `WeightedPool`).\n @param contractType The type of the contract\n @param contractName The name of the contract\n @return contractAddress The address of the associated contract, if registered, or zero\n @return isActive True if the contract was registered and not deprecated"},"functionSelector":"41d8c0bb","id":184,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"10239:19:2","nodeType":"FunctionDefinition","parameters":{"id":178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"mutability":"mutable","name":"contractType","nameLocation":"10281:12:2","nodeType":"VariableDeclaration","scope":184,"src":"10268:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":174,"nodeType":"UserDefinedTypeName","pathNode":{"id":173,"name":"ContractType","nameLocations":["10268:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"10268:12:2"},"referencedDeclaration":33,"src":"10268:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":177,"mutability":"mutable","name":"contractName","nameLocation":"10317:12:2","nodeType":"VariableDeclaration","scope":184,"src":"10303:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":176,"name":"string","nodeType":"ElementaryTypeName","src":"10303:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10258:77:2"},"returnParameters":{"id":183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"contractAddress","nameLocation":"10367:15:2","nodeType":"VariableDeclaration","scope":184,"src":"10359:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":179,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":182,"mutability":"mutable","name":"isActive","nameLocation":"10389:8:2","nodeType":"VariableDeclaration","scope":184,"src":"10384:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":181,"name":"bool","nodeType":"ElementaryTypeName","src":"10384:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10358:40:2"},"scope":202,"src":"10230:169:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":185,"nodeType":"StructuredDocumentation","src":"10405:233:2","text":" @notice Look up complete information about a registered contract by address.\n @param contractAddress The address of the associated contract\n @return info ContractInfo struct corresponding to the address"},"functionSelector":"8554c327","id":193,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"10652:23:2","nodeType":"FunctionDefinition","parameters":{"id":188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":187,"mutability":"mutable","name":"contractAddress","nameLocation":"10684:15:2","nodeType":"VariableDeclaration","scope":193,"src":"10676:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":186,"name":"address","nodeType":"ElementaryTypeName","src":"10676:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10675:25:2"},"returnParameters":{"id":192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":191,"mutability":"mutable","name":"info","nameLocation":"10744:4:2","nodeType":"VariableDeclaration","scope":193,"src":"10724:24:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$42_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":190,"nodeType":"UserDefinedTypeName","pathNode":{"id":189,"name":"ContractInfo","nameLocations":["10724:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":42,"src":"10724:12:2"},"referencedDeclaration":42,"src":"10724:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$42_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"10723:26:2"},"scope":202,"src":"10643:107:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":194,"nodeType":"StructuredDocumentation","src":"10756:92:2","text":"@notice Returns `true` if the given address is an active contract under the ROUTER type."},"functionSelector":"264e97e0","id":201,"implemented":false,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"10862:15:2","nodeType":"FunctionDefinition","parameters":{"id":197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":196,"mutability":"mutable","name":"router","nameLocation":"10886:6:2","nodeType":"VariableDeclaration","scope":201,"src":"10878:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":195,"name":"address","nodeType":"ElementaryTypeName","src":"10878:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10877:16:2"},"returnParameters":{"id":200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":201,"src":"10917:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":198,"name":"bool","nodeType":"ElementaryTypeName","src":"10917:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10916:6:2"},"scope":202,"src":"10853:70:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":203,"src":"306:10619:2","usedErrors":[82,90,97,105,110,115,120,123,126,129],"usedEvents":[52,62,67,74]}],"src":"46:10880:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[218]},"id":219,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":204,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":205,"nodeType":"StructuredDocumentation","src":"72:56:3","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":218,"linearizedBaseContracts":[218],"name":"IAuthorizer","nameLocation":"138:11:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":206,"nodeType":"StructuredDocumentation","src":"156:354:3","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":217,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:3","nodeType":"FunctionDefinition","parameters":{"id":213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":208,"mutability":"mutable","name":"actionId","nameLocation":"543:8:3","nodeType":"VariableDeclaration","scope":217,"src":"535:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":207,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":210,"mutability":"mutable","name":"account","nameLocation":"561:7:3","nodeType":"VariableDeclaration","scope":217,"src":"553:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":209,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":212,"mutability":"mutable","name":"where","nameLocation":"578:5:3","nodeType":"VariableDeclaration","scope":217,"src":"570:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":211,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:3"},"returnParameters":{"id":216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":215,"mutability":"mutable","name":"success","nameLocation":"613:7:3","nodeType":"VariableDeclaration","scope":217,"src":"608:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":214,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:3"},"scope":218,"src":"515:107:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":219,"src":"128:496:3","usedErrors":[],"usedEvents":[]}],"src":"46:579:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AfterSwapParams":[2453],"HookFlags":[2279],"IHooks":[420],"LiquidityManagement":[2232],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"SwapKind":[2387],"TokenConfig":[2346]},"id":421,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":220,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":421,"sourceUnit":2524,"src":"289:193:4","symbolAliases":[{"foreign":{"id":221,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2346,"src":"302:11:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":222,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2232,"src":"319:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":223,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2424,"src":"344:14:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":224,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2453,"src":"364:15:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":225,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2279,"src":"385:9:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":226,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2459,"src":"400:16:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":227,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"422:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":228,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2387,"src":"447:8:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":230,"nodeType":"StructuredDocumentation","src":"484:490:4","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":420,"linearizedBaseContracts":[420],"name":"IHooks","nameLocation":"985:6:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":231,"nodeType":"StructuredDocumentation","src":"1205:769:4","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":247,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:4","nodeType":"FunctionDefinition","parameters":{"id":243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":233,"mutability":"mutable","name":"factory","nameLocation":"2016:7:4","nodeType":"VariableDeclaration","scope":247,"src":"2008:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":232,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"pool","nameLocation":"2041:4:4","nodeType":"VariableDeclaration","scope":247,"src":"2033:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":234,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":239,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:4","nodeType":"VariableDeclaration","scope":247,"src":"2055:32:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":237,"nodeType":"UserDefinedTypeName","pathNode":{"id":236,"name":"TokenConfig","nameLocations":["2055:11:4"],"nodeType":"IdentifierPath","referencedDeclaration":2346,"src":"2055:11:4"},"referencedDeclaration":2346,"src":"2055:11:4","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2346_storage_ptr","typeString":"struct TokenConfig"}},"id":238,"nodeType":"ArrayTypeName","src":"2055:13:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":242,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:4","nodeType":"VariableDeclaration","scope":247,"src":"2097:48:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":241,"nodeType":"UserDefinedTypeName","pathNode":{"id":240,"name":"LiquidityManagement","nameLocations":["2097:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"2097:19:4"},"referencedDeclaration":2232,"src":"2097:19:4","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:4"},"returnParameters":{"id":246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":245,"mutability":"mutable","name":"success","nameLocation":"2175:7:4","nodeType":"VariableDeclaration","scope":247,"src":"2170:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":244,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:4"},"scope":420,"src":"1979:205:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":248,"nodeType":"StructuredDocumentation","src":"2190:412:4","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":254,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:4","nodeType":"FunctionDefinition","parameters":{"id":249,"nodeType":"ParameterList","parameters":[],"src":"2628:2:4"},"returnParameters":{"id":253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":252,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:4","nodeType":"VariableDeclaration","scope":254,"src":"2654:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2279_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":251,"nodeType":"UserDefinedTypeName","pathNode":{"id":250,"name":"HookFlags","nameLocations":["2654:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":2279,"src":"2654:9:4"},"referencedDeclaration":2279,"src":"2654:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2279_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:4"},"scope":420,"src":"2607:75:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":255,"nodeType":"StructuredDocumentation","src":"2897:484:4","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":265,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:4","nodeType":"FunctionDefinition","parameters":{"id":261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":258,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:4","nodeType":"VariableDeclaration","scope":265,"src":"3414:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":256,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":257,"nodeType":"ArrayTypeName","src":"3414:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":260,"mutability":"mutable","name":"userData","nameLocation":"3460:8:4","nodeType":"VariableDeclaration","scope":265,"src":"3447:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":259,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:4"},"returnParameters":{"id":264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":263,"mutability":"mutable","name":"success","nameLocation":"3493:7:4","nodeType":"VariableDeclaration","scope":265,"src":"3488:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":262,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:4"},"scope":420,"src":"3386:116:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":266,"nodeType":"StructuredDocumentation","src":"3508:563:4","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":278,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:4","nodeType":"FunctionDefinition","parameters":{"id":274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":269,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:4","nodeType":"VariableDeclaration","scope":278,"src":"4112:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":267,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":268,"nodeType":"ArrayTypeName","src":"4112:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":271,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:4","nodeType":"VariableDeclaration","scope":278,"src":"4153:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":270,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":273,"mutability":"mutable","name":"userData","nameLocation":"4196:8:4","nodeType":"VariableDeclaration","scope":278,"src":"4183:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":272,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:4"},"returnParameters":{"id":277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":276,"mutability":"mutable","name":"success","nameLocation":"4234:7:4","nodeType":"VariableDeclaration","scope":278,"src":"4229:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":275,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:4"},"scope":420,"src":"4076:167:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":279,"nodeType":"StructuredDocumentation","src":"4461:953:4","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":301,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:4","nodeType":"FunctionDefinition","parameters":{"id":297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":281,"mutability":"mutable","name":"router","nameLocation":"5466:6:4","nodeType":"VariableDeclaration","scope":301,"src":"5458:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":280,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":283,"mutability":"mutable","name":"pool","nameLocation":"5490:4:4","nodeType":"VariableDeclaration","scope":301,"src":"5482:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":282,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":286,"mutability":"mutable","name":"kind","nameLocation":"5521:4:4","nodeType":"VariableDeclaration","scope":301,"src":"5504:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"},"typeName":{"id":285,"nodeType":"UserDefinedTypeName","pathNode":{"id":284,"name":"AddLiquidityKind","nameLocations":["5504:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2459,"src":"5504:16:4"},"referencedDeclaration":2459,"src":"5504:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":289,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:4","nodeType":"VariableDeclaration","scope":301,"src":"5535:37:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":287,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":288,"nodeType":"ArrayTypeName","src":"5535:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":291,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:4","nodeType":"VariableDeclaration","scope":301,"src":"5582:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":290,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":294,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:4","nodeType":"VariableDeclaration","scope":301,"src":"5615:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":292,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":293,"nodeType":"ArrayTypeName","src":"5615:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":296,"mutability":"mutable","name":"userData","nameLocation":"5671:8:4","nodeType":"VariableDeclaration","scope":301,"src":"5658:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":295,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:4"},"returnParameters":{"id":300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":299,"mutability":"mutable","name":"success","nameLocation":"5709:7:4","nodeType":"VariableDeclaration","scope":301,"src":"5704:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":298,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:4"},"scope":420,"src":"5419:299:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":302,"nodeType":"StructuredDocumentation","src":"5724:1250:4","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":330,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:4","nodeType":"FunctionDefinition","parameters":{"id":323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":304,"mutability":"mutable","name":"router","nameLocation":"7025:6:4","nodeType":"VariableDeclaration","scope":330,"src":"7017:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":303,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":306,"mutability":"mutable","name":"pool","nameLocation":"7049:4:4","nodeType":"VariableDeclaration","scope":330,"src":"7041:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":305,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":309,"mutability":"mutable","name":"kind","nameLocation":"7080:4:4","nodeType":"VariableDeclaration","scope":330,"src":"7063:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"},"typeName":{"id":308,"nodeType":"UserDefinedTypeName","pathNode":{"id":307,"name":"AddLiquidityKind","nameLocations":["7063:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2459,"src":"7063:16:4"},"referencedDeclaration":2459,"src":"7063:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":312,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:4","nodeType":"VariableDeclaration","scope":330,"src":"7094:34:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":310,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":311,"nodeType":"ArrayTypeName","src":"7094:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":315,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:4","nodeType":"VariableDeclaration","scope":330,"src":"7138:29:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":313,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":314,"nodeType":"ArrayTypeName","src":"7138:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":317,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:4","nodeType":"VariableDeclaration","scope":330,"src":"7177:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":316,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":320,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:4","nodeType":"VariableDeclaration","scope":330,"src":"7207:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":318,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":319,"nodeType":"ArrayTypeName","src":"7207:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":322,"mutability":"mutable","name":"userData","nameLocation":"7263:8:4","nodeType":"VariableDeclaration","scope":330,"src":"7250:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":321,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:4"},"returnParameters":{"id":329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":325,"mutability":"mutable","name":"success","nameLocation":"7301:7:4","nodeType":"VariableDeclaration","scope":330,"src":"7296:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":324,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":328,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:4","nodeType":"VariableDeclaration","scope":330,"src":"7310:41:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":326,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":327,"nodeType":"ArrayTypeName","src":"7310:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:4"},"scope":420,"src":"6979:374:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":331,"nodeType":"StructuredDocumentation","src":"7572:992:4","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":353,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:4","nodeType":"FunctionDefinition","parameters":{"id":349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":333,"mutability":"mutable","name":"router","nameLocation":"8619:6:4","nodeType":"VariableDeclaration","scope":353,"src":"8611:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":332,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":335,"mutability":"mutable","name":"pool","nameLocation":"8643:4:4","nodeType":"VariableDeclaration","scope":353,"src":"8635:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":334,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":338,"mutability":"mutable","name":"kind","nameLocation":"8677:4:4","nodeType":"VariableDeclaration","scope":353,"src":"8657:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":337,"nodeType":"UserDefinedTypeName","pathNode":{"id":336,"name":"RemoveLiquidityKind","nameLocations":["8657:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2480,"src":"8657:19:4"},"referencedDeclaration":2480,"src":"8657:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:4","nodeType":"VariableDeclaration","scope":353,"src":"8691:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":339,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":343,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:4","nodeType":"VariableDeclaration","scope":353,"src":"8723:38:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":341,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":342,"nodeType":"ArrayTypeName","src":"8723:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":346,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:4","nodeType":"VariableDeclaration","scope":353,"src":"8771:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":344,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":345,"nodeType":"ArrayTypeName","src":"8771:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":348,"mutability":"mutable","name":"userData","nameLocation":"8827:8:4","nodeType":"VariableDeclaration","scope":353,"src":"8814:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":347,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:4"},"returnParameters":{"id":352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":351,"mutability":"mutable","name":"success","nameLocation":"8865:7:4","nodeType":"VariableDeclaration","scope":353,"src":"8860:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":350,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:4"},"scope":420,"src":"8569:305:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":354,"nodeType":"StructuredDocumentation","src":"8880:1276:4","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":382,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:4","nodeType":"FunctionDefinition","parameters":{"id":375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":356,"mutability":"mutable","name":"router","nameLocation":"10210:6:4","nodeType":"VariableDeclaration","scope":382,"src":"10202:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":355,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":358,"mutability":"mutable","name":"pool","nameLocation":"10234:4:4","nodeType":"VariableDeclaration","scope":382,"src":"10226:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":357,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":361,"mutability":"mutable","name":"kind","nameLocation":"10268:4:4","nodeType":"VariableDeclaration","scope":382,"src":"10248:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":360,"nodeType":"UserDefinedTypeName","pathNode":{"id":359,"name":"RemoveLiquidityKind","nameLocations":["10248:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2480,"src":"10248:19:4"},"referencedDeclaration":2480,"src":"10248:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":363,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:4","nodeType":"VariableDeclaration","scope":382,"src":"10282:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":362,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:4","nodeType":"VariableDeclaration","scope":382,"src":"10311:35:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":364,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":365,"nodeType":"ArrayTypeName","src":"10311:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":369,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:4","nodeType":"VariableDeclaration","scope":382,"src":"10356:30:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":367,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":368,"nodeType":"ArrayTypeName","src":"10356:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":372,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:4","nodeType":"VariableDeclaration","scope":382,"src":"10396:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":370,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":371,"nodeType":"ArrayTypeName","src":"10396:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":374,"mutability":"mutable","name":"userData","nameLocation":"10452:8:4","nodeType":"VariableDeclaration","scope":382,"src":"10439:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":373,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:4"},"returnParameters":{"id":381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":377,"mutability":"mutable","name":"success","nameLocation":"10490:7:4","nodeType":"VariableDeclaration","scope":382,"src":"10485:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":376,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":380,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:4","nodeType":"VariableDeclaration","scope":382,"src":"10499:42:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":378,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":379,"nodeType":"ArrayTypeName","src":"10499:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:4"},"scope":420,"src":"10161:382:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":383,"nodeType":"StructuredDocumentation","src":"10753:556:4","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":393,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:4","nodeType":"FunctionDefinition","parameters":{"id":389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":386,"mutability":"mutable","name":"params","nameLocation":"11360:6:4","nodeType":"VariableDeclaration","scope":393,"src":"11336:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":385,"nodeType":"UserDefinedTypeName","pathNode":{"id":384,"name":"PoolSwapParams","nameLocations":["11336:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2424,"src":"11336:14:4"},"referencedDeclaration":2424,"src":"11336:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":388,"mutability":"mutable","name":"pool","nameLocation":"11376:4:4","nodeType":"VariableDeclaration","scope":393,"src":"11368:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":387,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:4"},"returnParameters":{"id":392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":391,"mutability":"mutable","name":"success","nameLocation":"11405:7:4","nodeType":"VariableDeclaration","scope":393,"src":"11400:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":390,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:4"},"scope":420,"src":"11314:100:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":394,"nodeType":"StructuredDocumentation","src":"11420:671:4","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":404,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:4","nodeType":"FunctionDefinition","parameters":{"id":398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":397,"mutability":"mutable","name":"params","nameLocation":"12151:6:4","nodeType":"VariableDeclaration","scope":404,"src":"12126:31:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2453_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":396,"nodeType":"UserDefinedTypeName","pathNode":{"id":395,"name":"AfterSwapParams","nameLocations":["12126:15:4"],"nodeType":"IdentifierPath","referencedDeclaration":2453,"src":"12126:15:4"},"referencedDeclaration":2453,"src":"12126:15:4","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2453_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:4"},"returnParameters":{"id":403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"mutability":"mutable","name":"success","nameLocation":"12187:7:4","nodeType":"VariableDeclaration","scope":404,"src":"12182:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":399,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":402,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:4","nodeType":"VariableDeclaration","scope":404,"src":"12196:39:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":401,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:4"},"scope":420,"src":"12096:141:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":405,"nodeType":"StructuredDocumentation","src":"12243:795:4","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":419,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:4","nodeType":"FunctionDefinition","parameters":{"id":413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":408,"mutability":"mutable","name":"params","nameLocation":"13119:6:4","nodeType":"VariableDeclaration","scope":419,"src":"13095:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":407,"nodeType":"UserDefinedTypeName","pathNode":{"id":406,"name":"PoolSwapParams","nameLocations":["13095:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2424,"src":"13095:14:4"},"referencedDeclaration":2424,"src":"13095:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":410,"mutability":"mutable","name":"pool","nameLocation":"13143:4:4","nodeType":"VariableDeclaration","scope":419,"src":"13135:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":409,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":412,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:4","nodeType":"VariableDeclaration","scope":419,"src":"13157:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":411,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:4"},"returnParameters":{"id":418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":415,"mutability":"mutable","name":"success","nameLocation":"13223:7:4","nodeType":"VariableDeclaration","scope":419,"src":"13218:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":414,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":417,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:4","nodeType":"VariableDeclaration","scope":419,"src":"13232:32:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":416,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:4"},"scope":420,"src":"13043:223:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":421,"src":"975:12293:4","usedErrors":[],"usedEvents":[]}],"src":"46:13223:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[3290],"IProtocolFeeController":[725],"IVault":[763]},"id":726,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":422,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":726,"sourceUnit":3291,"src":"72:72:5","symbolAliases":[{"foreign":{"id":423,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":726,"sourceUnit":764,"src":"146:38:5","symbolAliases":[{"foreign":{"id":425,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"155:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":427,"nodeType":"StructuredDocumentation","src":"186:80:5","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":725,"linearizedBaseContracts":[725],"name":"IProtocolFeeController","nameLocation":"276:22:5","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":428,"nodeType":"StructuredDocumentation","src":"305:157:5","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":432,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:5","nodeType":"EventDefinition","parameters":{"id":431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":430,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:5","nodeType":"VariableDeclaration","scope":432,"src":"512:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":429,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:5"},"src":"467:72:5"},{"anonymous":false,"documentation":{"id":433,"nodeType":"StructuredDocumentation","src":"545:160:5","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":437,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:5","nodeType":"EventDefinition","parameters":{"id":436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":435,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:5","nodeType":"VariableDeclaration","scope":437,"src":"756:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":434,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:5"},"src":"710:74:5"},{"anonymous":false,"documentation":{"id":438,"nodeType":"StructuredDocumentation","src":"790:245:5","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":444,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:5","nodeType":"EventDefinition","parameters":{"id":443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":440,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:5","nodeType":"VariableDeclaration","scope":444,"src":"1079:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":439,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":442,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:5","nodeType":"VariableDeclaration","scope":444,"src":"1101:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":441,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:5"},"src":"1040:88:5"},{"anonymous":false,"documentation":{"id":445,"nodeType":"StructuredDocumentation","src":"1134:249:5","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":451,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:5","nodeType":"EventDefinition","parameters":{"id":450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":447,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:5","nodeType":"VariableDeclaration","scope":451,"src":"1428:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":446,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":449,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:5","nodeType":"VariableDeclaration","scope":451,"src":"1450:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":448,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:5"},"src":"1388:90:5"},{"anonymous":false,"documentation":{"id":452,"nodeType":"StructuredDocumentation","src":"1484:267:5","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":458,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:5","nodeType":"EventDefinition","parameters":{"id":457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":454,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:5","nodeType":"VariableDeclaration","scope":458,"src":"1798:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":453,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":456,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:5","nodeType":"VariableDeclaration","scope":458,"src":"1820:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":455,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:5"},"src":"1756:102:5"},{"anonymous":false,"documentation":{"id":459,"nodeType":"StructuredDocumentation","src":"1864:271:5","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":465,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:5","nodeType":"EventDefinition","parameters":{"id":464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:5","nodeType":"VariableDeclaration","scope":465,"src":"2183:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":460,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":463,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:5","nodeType":"VariableDeclaration","scope":465,"src":"2205:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":462,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:5"},"src":"2140:104:5"},{"anonymous":false,"documentation":{"id":466,"nodeType":"StructuredDocumentation","src":"2250:560:5","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":475,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:5","nodeType":"EventDefinition","parameters":{"id":474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":468,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:5","nodeType":"VariableDeclaration","scope":475,"src":"2846:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":467,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":471,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:5","nodeType":"VariableDeclaration","scope":475,"src":"2868:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":470,"nodeType":"UserDefinedTypeName","pathNode":{"id":469,"name":"IERC20","nameLocations":["2868:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2868:6:5"},"referencedDeclaration":3290,"src":"2868:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":473,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:5","nodeType":"VariableDeclaration","scope":475,"src":"2890:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":472,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:5"},"src":"2815:91:5"},{"anonymous":false,"documentation":{"id":476,"nodeType":"StructuredDocumentation","src":"2912:564:5","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":485,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:5","nodeType":"EventDefinition","parameters":{"id":484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":478,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:5","nodeType":"VariableDeclaration","scope":485,"src":"3513:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":477,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":481,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:5","nodeType":"VariableDeclaration","scope":485,"src":"3535:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":480,"nodeType":"UserDefinedTypeName","pathNode":{"id":479,"name":"IERC20","nameLocations":["3535:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3535:6:5"},"referencedDeclaration":3290,"src":"3535:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":483,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:5","nodeType":"VariableDeclaration","scope":485,"src":"3557:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":482,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:5"},"src":"3481:92:5"},{"anonymous":false,"documentation":{"id":486,"nodeType":"StructuredDocumentation","src":"3579:333:5","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":497,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:5","nodeType":"EventDefinition","parameters":{"id":496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":488,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:5","nodeType":"VariableDeclaration","scope":497,"src":"3945:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":487,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":491,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:5","nodeType":"VariableDeclaration","scope":497,"src":"3967:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":490,"nodeType":"UserDefinedTypeName","pathNode":{"id":489,"name":"IERC20","nameLocations":["3967:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3967:6:5"},"referencedDeclaration":3290,"src":"3967:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":493,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:5","nodeType":"VariableDeclaration","scope":497,"src":"3989:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":492,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":495,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:5","nodeType":"VariableDeclaration","scope":497,"src":"4016:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":494,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:5"},"src":"3917:115:5"},{"anonymous":false,"documentation":{"id":498,"nodeType":"StructuredDocumentation","src":"4038:398:5","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":509,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:5","nodeType":"EventDefinition","parameters":{"id":508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":500,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:5","nodeType":"VariableDeclaration","scope":509,"src":"4481:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":499,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":503,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:5","nodeType":"VariableDeclaration","scope":509,"src":"4511:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":502,"nodeType":"UserDefinedTypeName","pathNode":{"id":501,"name":"IERC20","nameLocations":["4511:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"4511:6:5"},"referencedDeclaration":3290,"src":"4511:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":505,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:5","nodeType":"VariableDeclaration","scope":509,"src":"4541:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":504,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":507,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:5","nodeType":"VariableDeclaration","scope":509,"src":"4576:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":506,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:5"},"src":"4441:156:5"},{"anonymous":false,"documentation":{"id":510,"nodeType":"StructuredDocumentation","src":"4603:529:5","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":518,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:5","nodeType":"EventDefinition","parameters":{"id":517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":512,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:5","nodeType":"VariableDeclaration","scope":518,"src":"5190:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":511,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":514,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:5","nodeType":"VariableDeclaration","scope":518,"src":"5220:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":513,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":516,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:5","nodeType":"VariableDeclaration","scope":518,"src":"5264:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":515,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:5"},"src":"5137:158:5"},{"anonymous":false,"documentation":{"id":519,"nodeType":"StructuredDocumentation","src":"5301:533:5","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":527,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:5","nodeType":"EventDefinition","parameters":{"id":526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":521,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:5","nodeType":"VariableDeclaration","scope":527,"src":"5893:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":520,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":523,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:5","nodeType":"VariableDeclaration","scope":527,"src":"5923:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":522,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":525,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:5","nodeType":"VariableDeclaration","scope":527,"src":"5968:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":524,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:5"},"src":"5839:160:5"},{"documentation":{"id":528,"nodeType":"StructuredDocumentation","src":"6005:219:5","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":530,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"6235:32:5","nodeType":"ErrorDefinition","parameters":{"id":529,"nodeType":"ParameterList","parameters":[],"src":"6267:2:5"},"src":"6229:41:5"},{"documentation":{"id":531,"nodeType":"StructuredDocumentation","src":"6276:221:5","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":533,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"6508:33:5","nodeType":"ErrorDefinition","parameters":{"id":532,"nodeType":"ParameterList","parameters":[],"src":"6541:2:5"},"src":"6502:42:5"},{"documentation":{"id":534,"nodeType":"StructuredDocumentation","src":"6550:156:5","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":538,"name":"PoolCreatorNotRegistered","nameLocation":"6717:24:5","nodeType":"ErrorDefinition","parameters":{"id":537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":536,"mutability":"mutable","name":"pool","nameLocation":"6750:4:5","nodeType":"VariableDeclaration","scope":538,"src":"6742:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":535,"name":"address","nodeType":"ElementaryTypeName","src":"6742:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6741:14:5"},"src":"6711:45:5"},{"documentation":{"id":539,"nodeType":"StructuredDocumentation","src":"6762:236:5","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":545,"name":"CallerIsNotPoolCreator","nameLocation":"7009:22:5","nodeType":"ErrorDefinition","parameters":{"id":544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":541,"mutability":"mutable","name":"caller","nameLocation":"7040:6:5","nodeType":"VariableDeclaration","scope":545,"src":"7032:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":540,"name":"address","nodeType":"ElementaryTypeName","src":"7032:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":543,"mutability":"mutable","name":"pool","nameLocation":"7056:4:5","nodeType":"VariableDeclaration","scope":545,"src":"7048:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":542,"name":"address","nodeType":"ElementaryTypeName","src":"7048:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7031:30:5"},"src":"7003:59:5"},{"documentation":{"id":546,"nodeType":"StructuredDocumentation","src":"7068:110:5","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":548,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"7189:31:5","nodeType":"ErrorDefinition","parameters":{"id":547,"nodeType":"ParameterList","parameters":[],"src":"7220:2:5"},"src":"7183:40:5"},{"documentation":{"id":549,"nodeType":"StructuredDocumentation","src":"7229:109:5","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":555,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"7352:5:5","nodeType":"FunctionDefinition","parameters":{"id":550,"nodeType":"ParameterList","parameters":[],"src":"7357:2:5"},"returnParameters":{"id":554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":553,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":555,"src":"7383:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":552,"nodeType":"UserDefinedTypeName","pathNode":{"id":551,"name":"IVault","nameLocations":["7383:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"7383:6:5"},"referencedDeclaration":763,"src":"7383:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"7382:8:5"},"scope":725,"src":"7343:48:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":556,"nodeType":"StructuredDocumentation","src":"7397:131:5","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":561,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"7542:20:5","nodeType":"FunctionDefinition","parameters":{"id":559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":558,"mutability":"mutable","name":"pool","nameLocation":"7571:4:5","nodeType":"VariableDeclaration","scope":561,"src":"7563:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":557,"name":"address","nodeType":"ElementaryTypeName","src":"7563:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7562:14:5"},"returnParameters":{"id":560,"nodeType":"ParameterList","parameters":[],"src":"7585:0:5"},"scope":725,"src":"7533:53:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":562,"nodeType":"StructuredDocumentation","src":"7592:156:5","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":567,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"7762:34:5","nodeType":"FunctionDefinition","parameters":{"id":563,"nodeType":"ParameterList","parameters":[],"src":"7796:2:5"},"returnParameters":{"id":566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":565,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"7830:25:5","nodeType":"VariableDeclaration","scope":567,"src":"7822:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":564,"name":"uint256","nodeType":"ElementaryTypeName","src":"7822:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7821:35:5"},"scope":725,"src":"7753:104:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":568,"nodeType":"StructuredDocumentation","src":"7863:159:5","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":573,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8036:35:5","nodeType":"FunctionDefinition","parameters":{"id":569,"nodeType":"ParameterList","parameters":[],"src":"8071:2:5"},"returnParameters":{"id":572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":571,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8105:26:5","nodeType":"VariableDeclaration","scope":573,"src":"8097:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":570,"name":"uint256","nodeType":"ElementaryTypeName","src":"8097:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8096:36:5"},"scope":725,"src":"8027:106:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":574,"nodeType":"StructuredDocumentation","src":"8139:280:5","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The global protocol swap fee percentage\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":583,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"8433:26:5","nodeType":"FunctionDefinition","parameters":{"id":577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":576,"mutability":"mutable","name":"pool","nameLocation":"8477:4:5","nodeType":"VariableDeclaration","scope":583,"src":"8469:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":575,"name":"address","nodeType":"ElementaryTypeName","src":"8469:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8459:28:5"},"returnParameters":{"id":582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":579,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8519:25:5","nodeType":"VariableDeclaration","scope":583,"src":"8511:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":578,"name":"uint256","nodeType":"ElementaryTypeName","src":"8511:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":581,"mutability":"mutable","name":"isOverride","nameLocation":"8551:10:5","nodeType":"VariableDeclaration","scope":583,"src":"8546:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":580,"name":"bool","nodeType":"ElementaryTypeName","src":"8546:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8510:52:5"},"scope":725,"src":"8424:139:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":584,"nodeType":"StructuredDocumentation","src":"8569:283:5","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The global protocol yield fee percentage\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":593,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"8866:27:5","nodeType":"FunctionDefinition","parameters":{"id":587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":586,"mutability":"mutable","name":"pool","nameLocation":"8911:4:5","nodeType":"VariableDeclaration","scope":593,"src":"8903:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":585,"name":"address","nodeType":"ElementaryTypeName","src":"8903:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8893:28:5"},"returnParameters":{"id":592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":589,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8953:26:5","nodeType":"VariableDeclaration","scope":593,"src":"8945:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":588,"name":"uint256","nodeType":"ElementaryTypeName","src":"8945:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":591,"mutability":"mutable","name":"isOverride","nameLocation":"8986:10:5","nodeType":"VariableDeclaration","scope":593,"src":"8981:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":590,"name":"bool","nodeType":"ElementaryTypeName","src":"8981:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8944:53:5"},"scope":725,"src":"8857:141:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":594,"nodeType":"StructuredDocumentation","src":"9004:344:5","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":602,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"9362:21:5","nodeType":"FunctionDefinition","parameters":{"id":597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":596,"mutability":"mutable","name":"pool","nameLocation":"9392:4:5","nodeType":"VariableDeclaration","scope":602,"src":"9384:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":595,"name":"address","nodeType":"ElementaryTypeName","src":"9384:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9383:14:5"},"returnParameters":{"id":601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":600,"mutability":"mutable","name":"feeAmounts","nameLocation":"9438:10:5","nodeType":"VariableDeclaration","scope":602,"src":"9421:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":598,"name":"uint256","nodeType":"ElementaryTypeName","src":"9421:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":599,"nodeType":"ArrayTypeName","src":"9421:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9420:29:5"},"scope":725,"src":"9353:97:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":603,"nodeType":"StructuredDocumentation","src":"9456:348:5","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":611,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"9818:24:5","nodeType":"FunctionDefinition","parameters":{"id":606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":605,"mutability":"mutable","name":"pool","nameLocation":"9851:4:5","nodeType":"VariableDeclaration","scope":611,"src":"9843:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":604,"name":"address","nodeType":"ElementaryTypeName","src":"9843:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9842:14:5"},"returnParameters":{"id":610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"feeAmounts","nameLocation":"9897:10:5","nodeType":"VariableDeclaration","scope":611,"src":"9880:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":607,"name":"uint256","nodeType":"ElementaryTypeName","src":"9880:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":608,"nodeType":"ArrayTypeName","src":"9880:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9879:29:5"},"scope":725,"src":"9809:100:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":612,"nodeType":"StructuredDocumentation","src":"9915:1445:5","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":621,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"11374:29:5","nodeType":"FunctionDefinition","parameters":{"id":617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":614,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"11421:21:5","nodeType":"VariableDeclaration","scope":621,"src":"11413:29:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":613,"name":"uint256","nodeType":"ElementaryTypeName","src":"11413:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":616,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11460:24:5","nodeType":"VariableDeclaration","scope":621,"src":"11452:32:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":615,"name":"uint256","nodeType":"ElementaryTypeName","src":"11452:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11403:87:5"},"returnParameters":{"id":620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":619,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11522:22:5","nodeType":"VariableDeclaration","scope":621,"src":"11514:30:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":618,"name":"uint256","nodeType":"ElementaryTypeName","src":"11514:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11513:32:5"},"scope":725,"src":"11365:181:5","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":622,"nodeType":"StructuredDocumentation","src":"11552:398:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":627,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"11964:31:5","nodeType":"FunctionDefinition","parameters":{"id":625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":624,"mutability":"mutable","name":"pool","nameLocation":"12004:4:5","nodeType":"VariableDeclaration","scope":627,"src":"11996:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":623,"name":"address","nodeType":"ElementaryTypeName","src":"11996:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11995:14:5"},"returnParameters":{"id":626,"nodeType":"ParameterList","parameters":[],"src":"12018:0:5"},"scope":725,"src":"11955:64:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":628,"nodeType":"StructuredDocumentation","src":"12025:400:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":633,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"12439:32:5","nodeType":"FunctionDefinition","parameters":{"id":631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":630,"mutability":"mutable","name":"pool","nameLocation":"12480:4:5","nodeType":"VariableDeclaration","scope":633,"src":"12472:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":629,"name":"address","nodeType":"ElementaryTypeName","src":"12472:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12471:14:5"},"returnParameters":{"id":632,"nodeType":"ParameterList","parameters":[],"src":"12494:0:5"},"scope":725,"src":"12430:65:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":634,"nodeType":"StructuredDocumentation","src":"12719:826:5","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":647,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"13559:12:5","nodeType":"FunctionDefinition","parameters":{"id":641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":636,"mutability":"mutable","name":"pool","nameLocation":"13589:4:5","nodeType":"VariableDeclaration","scope":647,"src":"13581:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":635,"name":"address","nodeType":"ElementaryTypeName","src":"13581:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":638,"mutability":"mutable","name":"poolCreator","nameLocation":"13611:11:5","nodeType":"VariableDeclaration","scope":647,"src":"13603:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":637,"name":"address","nodeType":"ElementaryTypeName","src":"13603:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":640,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"13637:17:5","nodeType":"VariableDeclaration","scope":647,"src":"13632:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":639,"name":"bool","nodeType":"ElementaryTypeName","src":"13632:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13571:89:5"},"returnParameters":{"id":646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":643,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"13687:26:5","nodeType":"VariableDeclaration","scope":647,"src":"13679:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":642,"name":"uint256","nodeType":"ElementaryTypeName","src":"13679:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":645,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"13723:27:5","nodeType":"VariableDeclaration","scope":647,"src":"13715:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":644,"name":"uint256","nodeType":"ElementaryTypeName","src":"13715:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13678:73:5"},"scope":725,"src":"13550:202:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":648,"nodeType":"StructuredDocumentation","src":"13758:175:5","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":653,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"13947:34:5","nodeType":"FunctionDefinition","parameters":{"id":651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":650,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"13990:28:5","nodeType":"VariableDeclaration","scope":653,"src":"13982:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":649,"name":"uint256","nodeType":"ElementaryTypeName","src":"13982:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13981:38:5"},"returnParameters":{"id":652,"nodeType":"ParameterList","parameters":[],"src":"14028:0:5"},"scope":725,"src":"13938:91:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":654,"nodeType":"StructuredDocumentation","src":"14035:178:5","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":659,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"14227:35:5","nodeType":"FunctionDefinition","parameters":{"id":657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":656,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"14271:29:5","nodeType":"VariableDeclaration","scope":659,"src":"14263:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":655,"name":"uint256","nodeType":"ElementaryTypeName","src":"14263:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14262:39:5"},"returnParameters":{"id":658,"nodeType":"ParameterList","parameters":[],"src":"14310:0:5"},"scope":725,"src":"14218:93:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":660,"nodeType":"StructuredDocumentation","src":"14317:272:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":667,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"14603:28:5","nodeType":"FunctionDefinition","parameters":{"id":665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":662,"mutability":"mutable","name":"pool","nameLocation":"14640:4:5","nodeType":"VariableDeclaration","scope":667,"src":"14632:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":661,"name":"address","nodeType":"ElementaryTypeName","src":"14632:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":664,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"14654:28:5","nodeType":"VariableDeclaration","scope":667,"src":"14646:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":663,"name":"uint256","nodeType":"ElementaryTypeName","src":"14646:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14631:52:5"},"returnParameters":{"id":666,"nodeType":"ParameterList","parameters":[],"src":"14692:0:5"},"scope":725,"src":"14594:99:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":668,"nodeType":"StructuredDocumentation","src":"14699:276:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":675,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"14989:29:5","nodeType":"FunctionDefinition","parameters":{"id":673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":670,"mutability":"mutable","name":"pool","nameLocation":"15027:4:5","nodeType":"VariableDeclaration","scope":675,"src":"15019:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":669,"name":"address","nodeType":"ElementaryTypeName","src":"15019:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":672,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"15041:29:5","nodeType":"VariableDeclaration","scope":675,"src":"15033:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":671,"name":"uint256","nodeType":"ElementaryTypeName","src":"15033:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15018:53:5"},"returnParameters":{"id":674,"nodeType":"ParameterList","parameters":[],"src":"15080:0:5"},"scope":725,"src":"14980:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":676,"nodeType":"StructuredDocumentation","src":"15087:623:5","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":683,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"15724:31:5","nodeType":"FunctionDefinition","parameters":{"id":681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":678,"mutability":"mutable","name":"pool","nameLocation":"15764:4:5","nodeType":"VariableDeclaration","scope":683,"src":"15756:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":677,"name":"address","nodeType":"ElementaryTypeName","src":"15756:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":680,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"15778:28:5","nodeType":"VariableDeclaration","scope":683,"src":"15770:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":679,"name":"uint256","nodeType":"ElementaryTypeName","src":"15770:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15755:52:5"},"returnParameters":{"id":682,"nodeType":"ParameterList","parameters":[],"src":"15816:0:5"},"scope":725,"src":"15715:102:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":684,"nodeType":"StructuredDocumentation","src":"15823:626:5","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":691,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"16463:32:5","nodeType":"FunctionDefinition","parameters":{"id":689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":686,"mutability":"mutable","name":"pool","nameLocation":"16504:4:5","nodeType":"VariableDeclaration","scope":691,"src":"16496:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":685,"name":"address","nodeType":"ElementaryTypeName","src":"16496:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":688,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"16518:29:5","nodeType":"VariableDeclaration","scope":691,"src":"16510:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":687,"name":"uint256","nodeType":"ElementaryTypeName","src":"16510:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16495:53:5"},"returnParameters":{"id":690,"nodeType":"ParameterList","parameters":[],"src":"16557:0:5"},"scope":725,"src":"16454:104:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":692,"nodeType":"StructuredDocumentation","src":"16564:296:5","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":699,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"16874:20:5","nodeType":"FunctionDefinition","parameters":{"id":697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":694,"mutability":"mutable","name":"pool","nameLocation":"16903:4:5","nodeType":"VariableDeclaration","scope":699,"src":"16895:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":693,"name":"address","nodeType":"ElementaryTypeName","src":"16895:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":696,"mutability":"mutable","name":"recipient","nameLocation":"16917:9:5","nodeType":"VariableDeclaration","scope":699,"src":"16909:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":695,"name":"address","nodeType":"ElementaryTypeName","src":"16909:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16894:33:5"},"returnParameters":{"id":698,"nodeType":"ParameterList","parameters":[],"src":"16936:0:5"},"scope":725,"src":"16865:72:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":700,"nodeType":"StructuredDocumentation","src":"16943:339:5","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":710,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"17296:28:5","nodeType":"FunctionDefinition","parameters":{"id":708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":702,"mutability":"mutable","name":"pool","nameLocation":"17333:4:5","nodeType":"VariableDeclaration","scope":710,"src":"17325:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":701,"name":"address","nodeType":"ElementaryTypeName","src":"17325:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":704,"mutability":"mutable","name":"recipient","nameLocation":"17347:9:5","nodeType":"VariableDeclaration","scope":710,"src":"17339:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":703,"name":"address","nodeType":"ElementaryTypeName","src":"17339:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":707,"mutability":"mutable","name":"token","nameLocation":"17365:5:5","nodeType":"VariableDeclaration","scope":710,"src":"17358:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":706,"nodeType":"UserDefinedTypeName","pathNode":{"id":705,"name":"IERC20","nameLocations":["17358:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"17358:6:5"},"referencedDeclaration":3290,"src":"17358:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17324:47:5"},"returnParameters":{"id":709,"nodeType":"ParameterList","parameters":[],"src":"17380:0:5"},"scope":725,"src":"17287:94:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":711,"nodeType":"StructuredDocumentation","src":"17387:291:5","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":718,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"17692:23:5","nodeType":"FunctionDefinition","parameters":{"id":716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":713,"mutability":"mutable","name":"pool","nameLocation":"17724:4:5","nodeType":"VariableDeclaration","scope":718,"src":"17716:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":712,"name":"address","nodeType":"ElementaryTypeName","src":"17716:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":715,"mutability":"mutable","name":"recipient","nameLocation":"17738:9:5","nodeType":"VariableDeclaration","scope":718,"src":"17730:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":714,"name":"address","nodeType":"ElementaryTypeName","src":"17730:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17715:33:5"},"returnParameters":{"id":717,"nodeType":"ParameterList","parameters":[],"src":"17757:0:5"},"scope":725,"src":"17683:75:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":719,"nodeType":"StructuredDocumentation","src":"17764:310:5","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":724,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"18088:23:5","nodeType":"FunctionDefinition","parameters":{"id":722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":721,"mutability":"mutable","name":"pool","nameLocation":"18120:4:5","nodeType":"VariableDeclaration","scope":724,"src":"18112:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":720,"name":"address","nodeType":"ElementaryTypeName","src":"18112:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18111:14:5"},"returnParameters":{"id":723,"nodeType":"ParameterList","parameters":[],"src":"18134:0:5"},"scope":725,"src":"18079:56:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":726,"src":"266:17871:5","usedErrors":[530,533,538,545,548],"usedEvents":[432,437,444,451,458,465,475,485,497,509,518,527]}],"src":"46:18092:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[14],"IVault":[763],"IVaultAdmin":[1053],"IVaultErrors":[1420],"IVaultEvents":[1659],"IVaultExtension":[2078],"IVaultMain":[2214]},"id":764,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":727,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":729,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":15,"src":"72:80:6","symbolAliases":[{"foreign":{"id":728,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":731,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":2079,"src":"153:56:6","symbolAliases":[{"foreign":{"id":730,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2078,"src":"162:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":733,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":1421,"src":"210:50:6","symbolAliases":[{"foreign":{"id":732,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1420,"src":"219:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":735,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":1660,"src":"261:50:6","symbolAliases":[{"foreign":{"id":734,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1659,"src":"270:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":737,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":1054,"src":"312:48:6","symbolAliases":[{"foreign":{"id":736,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1053,"src":"321:11:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":739,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":2215,"src":"361:46:6","symbolAliases":[{"foreign":{"id":738,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2214,"src":"370:10:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":741,"name":"IVaultMain","nameLocations":["539:10:6"],"nodeType":"IdentifierPath","referencedDeclaration":2214,"src":"539:10:6"},"id":742,"nodeType":"InheritanceSpecifier","src":"539:10:6"},{"baseName":{"id":743,"name":"IVaultExtension","nameLocations":["551:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":2078,"src":"551:15:6"},"id":744,"nodeType":"InheritanceSpecifier","src":"551:15:6"},{"baseName":{"id":745,"name":"IVaultAdmin","nameLocations":["568:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":1053,"src":"568:11:6"},"id":746,"nodeType":"InheritanceSpecifier","src":"568:11:6"},{"baseName":{"id":747,"name":"IVaultErrors","nameLocations":["581:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1420,"src":"581:12:6"},"id":748,"nodeType":"InheritanceSpecifier","src":"581:12:6"},{"baseName":{"id":749,"name":"IVaultEvents","nameLocations":["595:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1659,"src":"595:12:6"},"id":750,"nodeType":"InheritanceSpecifier","src":"595:12:6"},{"baseName":{"id":751,"name":"IAuthentication","nameLocations":["609:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"609:15:6"},"id":752,"nodeType":"InheritanceSpecifier","src":"609:15:6"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"409:110:6","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":763,"linearizedBaseContracts":[763,14,1659,1420,1053,2078,2214],"name":"IVault","nameLocation":"529:6:6","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[781,1682],"documentation":{"id":753,"nodeType":"StructuredDocumentation","src":"631:41:6","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":762,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:6","nodeType":"FunctionDefinition","overrides":{"id":757,"nodeType":"OverrideSpecifier","overrides":[{"id":755,"name":"IVaultAdmin","nameLocations":["717:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":1053,"src":"717:11:6"},{"id":756,"name":"IVaultExtension","nameLocations":["730:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":2078,"src":"730:15:6"}],"src":"708:38:6"},"parameters":{"id":754,"nodeType":"ParameterList","parameters":[],"src":"691:2:6"},"returnParameters":{"id":761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":762,"src":"756:6:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":759,"nodeType":"UserDefinedTypeName","pathNode":{"id":758,"name":"IVault","nameLocations":["756:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"756:6:6"},"referencedDeclaration":763,"src":"756:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:6"},"scope":763,"src":"677:87:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":764,"src":"519:247:6","usedErrors":[5,1065,1070,1075,1080,1089,1095,1098,1101,1104,1107,1110,1113,1122,1125,1128,1131,1134,1137,1140,1143,1146,1149,1152,1155,1158,1161,1164,1170,1177,1184,1187,1190,1200,1210,1217,1220,1223,1226,1236,1246,1253,1256,1259,1262,1265,1268,1271,1274,1277,1282,1287,1292,1295,1298,1301,1304,1307,1312,1317,1322,1328,1334,1337,1345,1351,1357,1360,1363,1366,1371,1381,1391,1398,1401,1404,1407,1410,1413,1416,1419],"usedEvents":[1458,1463,1482,1494,1506,1524,1542,1547,1550,1553,1560,1567,1574,1581,1588,1594,1600,1612,1622,1632,1644,1649,1658]}],"src":"46:721:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[218],"IERC4626":[3212],"IProtocolFeeController":[725],"IVault":[763],"IVaultAdmin":[1053]},"id":1054,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":765,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:7"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":767,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1054,"sourceUnit":3213,"src":"72:75:7","symbolAliases":[{"foreign":{"id":766,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"81:8:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":769,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1054,"sourceUnit":726,"src":"149:70:7","symbolAliases":[{"foreign":{"id":768,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":725,"src":"158:22:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":771,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1054,"sourceUnit":219,"src":"220:48:7","symbolAliases":[{"foreign":{"id":770,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"229:11:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":773,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1054,"sourceUnit":764,"src":"269:38:7","symbolAliases":[{"foreign":{"id":772,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"278:6:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":774,"nodeType":"StructuredDocumentation","src":"309:276:7","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":1053,"linearizedBaseContracts":[1053],"name":"IVaultAdmin","nameLocation":"596:11:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":775,"nodeType":"StructuredDocumentation","src":"841:206:7","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":781,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:7","nodeType":"FunctionDefinition","parameters":{"id":776,"nodeType":"ParameterList","parameters":[],"src":"1066:2:7"},"returnParameters":{"id":780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":781,"src":"1092:6:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":778,"nodeType":"UserDefinedTypeName","pathNode":{"id":777,"name":"IVault","nameLocations":["1092:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"1092:6:7"},"referencedDeclaration":763,"src":"1092:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:7"},"scope":1053,"src":"1052:48:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":782,"nodeType":"StructuredDocumentation","src":"1106:326:7","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":787,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:7","nodeType":"FunctionDefinition","parameters":{"id":783,"nodeType":"ParameterList","parameters":[],"src":"1467:2:7"},"returnParameters":{"id":786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":785,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:7","nodeType":"VariableDeclaration","scope":787,"src":"1493:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":784,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:7"},"scope":1053,"src":"1437:83:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":788,"nodeType":"StructuredDocumentation","src":"1526:414:7","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":793,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:7","nodeType":"FunctionDefinition","parameters":{"id":789,"nodeType":"ParameterList","parameters":[],"src":"1977:2:7"},"returnParameters":{"id":792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":791,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:7","nodeType":"VariableDeclaration","scope":793,"src":"2003:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":790,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:7"},"scope":1053,"src":"1945:87:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":794,"nodeType":"StructuredDocumentation","src":"2038:321:7","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":799,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:7","nodeType":"FunctionDefinition","parameters":{"id":795,"nodeType":"ParameterList","parameters":[],"src":"2395:2:7"},"returnParameters":{"id":798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":797,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:7","nodeType":"VariableDeclaration","scope":799,"src":"2421:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":796,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:7"},"scope":1053,"src":"2364:85:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":800,"nodeType":"StructuredDocumentation","src":"2455:193:7","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":805,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:7","nodeType":"FunctionDefinition","parameters":{"id":801,"nodeType":"ParameterList","parameters":[],"src":"2682:2:7"},"returnParameters":{"id":804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":803,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:7","nodeType":"VariableDeclaration","scope":805,"src":"2708:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":802,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:7"},"scope":1053,"src":"2653:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":806,"nodeType":"StructuredDocumentation","src":"2733:129:7","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":811,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:7","nodeType":"FunctionDefinition","parameters":{"id":807,"nodeType":"ParameterList","parameters":[],"src":"2896:2:7"},"returnParameters":{"id":810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":809,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:7","nodeType":"VariableDeclaration","scope":811,"src":"2922:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":808,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:7"},"scope":1053,"src":"2867:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":812,"nodeType":"StructuredDocumentation","src":"2947:439:7","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":817,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:7","nodeType":"FunctionDefinition","parameters":{"id":813,"nodeType":"ParameterList","parameters":[],"src":"3425:2:7"},"returnParameters":{"id":816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":815,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:7","nodeType":"VariableDeclaration","scope":817,"src":"3451:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":814,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:7"},"scope":1053,"src":"3391:92:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":818,"nodeType":"StructuredDocumentation","src":"3489:502:7","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":823,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:7","nodeType":"FunctionDefinition","parameters":{"id":819,"nodeType":"ParameterList","parameters":[],"src":"4032:2:7"},"returnParameters":{"id":822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":821,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:7","nodeType":"VariableDeclaration","scope":823,"src":"4058:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":820,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:7"},"scope":1053,"src":"3996:96:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":824,"nodeType":"StructuredDocumentation","src":"4098:291:7","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":829,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:7","nodeType":"FunctionDefinition","parameters":{"id":825,"nodeType":"ParameterList","parameters":[],"src":"4424:2:7"},"returnParameters":{"id":828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":827,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:7","nodeType":"VariableDeclaration","scope":829,"src":"4450:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":826,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:7"},"scope":1053,"src":"4394:84:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":830,"nodeType":"StructuredDocumentation","src":"4484:271:7","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":835,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:7","nodeType":"FunctionDefinition","parameters":{"id":831,"nodeType":"ParameterList","parameters":[],"src":"4789:2:7"},"returnParameters":{"id":834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":833,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:7","nodeType":"VariableDeclaration","scope":835,"src":"4815:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":832,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:7"},"scope":1053,"src":"4760:82:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":836,"nodeType":"StructuredDocumentation","src":"5069:529:7","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":841,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:7","nodeType":"FunctionDefinition","parameters":{"id":837,"nodeType":"ParameterList","parameters":[],"src":"5625:2:7"},"returnParameters":{"id":840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":839,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:7","nodeType":"VariableDeclaration","scope":841,"src":"5651:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":838,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:7"},"scope":1053,"src":"5603:66:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":842,"nodeType":"StructuredDocumentation","src":"5675:400:7","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":851,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:7","nodeType":"FunctionDefinition","parameters":{"id":843,"nodeType":"ParameterList","parameters":[],"src":"6108:2:7"},"returnParameters":{"id":850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":845,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:7","nodeType":"VariableDeclaration","scope":851,"src":"6158:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":844,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":847,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:7","nodeType":"VariableDeclaration","scope":851,"src":"6176:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":846,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":849,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:7","nodeType":"VariableDeclaration","scope":851,"src":"6208:31:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":848,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:7"},"scope":1053,"src":"6080:161:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":852,"nodeType":"StructuredDocumentation","src":"6247:517:7","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":855,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:7","nodeType":"FunctionDefinition","parameters":{"id":853,"nodeType":"ParameterList","parameters":[],"src":"6788:2:7"},"returnParameters":{"id":854,"nodeType":"ParameterList","parameters":[],"src":"6799:0:7"},"scope":1053,"src":"6769:31:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":856,"nodeType":"StructuredDocumentation","src":"6806:569:7","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":859,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:7","nodeType":"FunctionDefinition","parameters":{"id":857,"nodeType":"ParameterList","parameters":[],"src":"7401:2:7"},"returnParameters":{"id":858,"nodeType":"ParameterList","parameters":[],"src":"7412:0:7"},"scope":1053,"src":"7380:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":860,"nodeType":"StructuredDocumentation","src":"7639:276:7","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":865,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:7","nodeType":"FunctionDefinition","parameters":{"id":863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":862,"mutability":"mutable","name":"pool","nameLocation":"7947:4:7","nodeType":"VariableDeclaration","scope":865,"src":"7939:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":861,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:7"},"returnParameters":{"id":864,"nodeType":"ParameterList","parameters":[],"src":"7961:0:7"},"scope":1053,"src":"7920:42:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":866,"nodeType":"StructuredDocumentation","src":"7968:366:7","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":871,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:7","nodeType":"FunctionDefinition","parameters":{"id":869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":868,"mutability":"mutable","name":"pool","nameLocation":"8368:4:7","nodeType":"VariableDeclaration","scope":871,"src":"8360:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":867,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:7"},"returnParameters":{"id":870,"nodeType":"ParameterList","parameters":[],"src":"8382:0:7"},"scope":1053,"src":"8339:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":872,"nodeType":"StructuredDocumentation","src":"8606:520:7","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":879,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:7","nodeType":"FunctionDefinition","parameters":{"id":877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":874,"mutability":"mutable","name":"pool","nameLocation":"9175:4:7","nodeType":"VariableDeclaration","scope":879,"src":"9167:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":873,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":876,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:7","nodeType":"VariableDeclaration","scope":879,"src":"9181:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":875,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:7"},"returnParameters":{"id":878,"nodeType":"ParameterList","parameters":[],"src":"9216:0:7"},"scope":1053,"src":"9131:86:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"9223:463:7","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":891,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:7","nodeType":"FunctionDefinition","parameters":{"id":883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"pool","nameLocation":"9738:4:7","nodeType":"VariableDeclaration","scope":891,"src":"9730:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":881,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:7"},"returnParameters":{"id":890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":886,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:7","nodeType":"VariableDeclaration","scope":891,"src":"9767:31:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":884,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":885,"nodeType":"ArrayTypeName","src":"9767:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":889,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:7","nodeType":"VariableDeclaration","scope":891,"src":"9800:32:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":887,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":888,"nodeType":"ArrayTypeName","src":"9800:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:7"},"scope":1053,"src":"9691:143:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":892,"nodeType":"StructuredDocumentation","src":"9840:755:7","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":899,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:7","nodeType":"FunctionDefinition","parameters":{"id":897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":894,"mutability":"mutable","name":"pool","nameLocation":"10650:4:7","nodeType":"VariableDeclaration","scope":899,"src":"10642:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":893,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":896,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:7","nodeType":"VariableDeclaration","scope":899,"src":"10656:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":895,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:7"},"returnParameters":{"id":898,"nodeType":"ParameterList","parameters":[],"src":"10703:0:7"},"scope":1053,"src":"10600:104:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":900,"nodeType":"StructuredDocumentation","src":"10710:760:7","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":907,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:7","nodeType":"FunctionDefinition","parameters":{"id":905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":902,"mutability":"mutable","name":"pool","nameLocation":"11526:4:7","nodeType":"VariableDeclaration","scope":907,"src":"11518:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":901,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":904,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:7","nodeType":"VariableDeclaration","scope":907,"src":"11532:38:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":903,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:7"},"returnParameters":{"id":906,"nodeType":"ParameterList","parameters":[],"src":"11580:0:7"},"scope":1053,"src":"11475:106:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":908,"nodeType":"StructuredDocumentation","src":"11587:249:7","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":914,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:7","nodeType":"FunctionDefinition","parameters":{"id":912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:7","nodeType":"VariableDeclaration","scope":914,"src":"11875:47:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"},"typeName":{"id":910,"nodeType":"UserDefinedTypeName","pathNode":{"id":909,"name":"IProtocolFeeController","nameLocations":["11875:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":725,"src":"11875:22:7"},"referencedDeclaration":725,"src":"11875:22:7","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:7"},"returnParameters":{"id":913,"nodeType":"ParameterList","parameters":[],"src":"11932:0:7"},"scope":1053,"src":"11841:92:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":915,"nodeType":"StructuredDocumentation","src":"12160:557:7","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":920,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:7","nodeType":"FunctionDefinition","parameters":{"id":918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":917,"mutability":"mutable","name":"pool","nameLocation":"12758:4:7","nodeType":"VariableDeclaration","scope":920,"src":"12750:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":916,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:7"},"returnParameters":{"id":919,"nodeType":"ParameterList","parameters":[],"src":"12772:0:7"},"scope":1053,"src":"12722:51:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":921,"nodeType":"StructuredDocumentation","src":"12779:409:7","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":926,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:7","nodeType":"FunctionDefinition","parameters":{"id":924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":923,"mutability":"mutable","name":"pool","nameLocation":"13230:4:7","nodeType":"VariableDeclaration","scope":926,"src":"13222:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":922,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:7"},"returnParameters":{"id":925,"nodeType":"ParameterList","parameters":[],"src":"13244:0:7"},"scope":1053,"src":"13193:52:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":927,"nodeType":"StructuredDocumentation","src":"13476:653:7","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":930,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:7","nodeType":"FunctionDefinition","parameters":{"id":928,"nodeType":"ParameterList","parameters":[],"src":"14155:2:7"},"returnParameters":{"id":929,"nodeType":"ParameterList","parameters":[],"src":"14166:0:7"},"scope":1053,"src":"14134:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":931,"nodeType":"StructuredDocumentation","src":"14173:223:7","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":934,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:7","nodeType":"FunctionDefinition","parameters":{"id":932,"nodeType":"ParameterList","parameters":[],"src":"14433:2:7"},"returnParameters":{"id":933,"nodeType":"ParameterList","parameters":[],"src":"14444:0:7"},"scope":1053,"src":"14401:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":935,"nodeType":"StructuredDocumentation","src":"14451:166:7","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":938,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:7","nodeType":"FunctionDefinition","parameters":{"id":936,"nodeType":"ParameterList","parameters":[],"src":"14642:2:7"},"returnParameters":{"id":937,"nodeType":"ParameterList","parameters":[],"src":"14653:0:7"},"scope":1053,"src":"14622:32:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":939,"nodeType":"StructuredDocumentation","src":"14881:590:7","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":944,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:7","nodeType":"FunctionDefinition","parameters":{"id":940,"nodeType":"ParameterList","parameters":[],"src":"15501:2:7"},"returnParameters":{"id":943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":942,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:7","nodeType":"VariableDeclaration","scope":944,"src":"15527:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":941,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:7"},"scope":1053,"src":"15476:71:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":945,"nodeType":"StructuredDocumentation","src":"15553:619:7","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":948,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:7","nodeType":"FunctionDefinition","parameters":{"id":946,"nodeType":"ParameterList","parameters":[],"src":"16203:2:7"},"returnParameters":{"id":947,"nodeType":"ParameterList","parameters":[],"src":"16214:0:7"},"scope":1053,"src":"16177:38:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":949,"nodeType":"StructuredDocumentation","src":"16221:545:7","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":952,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:7","nodeType":"FunctionDefinition","parameters":{"id":950,"nodeType":"ParameterList","parameters":[],"src":"16799:2:7"},"returnParameters":{"id":951,"nodeType":"ParameterList","parameters":[],"src":"16810:0:7"},"scope":1053,"src":"16771:40:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":953,"nodeType":"StructuredDocumentation","src":"16817:860:7","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":969,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:7","nodeType":"FunctionDefinition","parameters":{"id":965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":956,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:7","nodeType":"VariableDeclaration","scope":969,"src":"17717:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":955,"nodeType":"UserDefinedTypeName","pathNode":{"id":954,"name":"IERC4626","nameLocations":["17717:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"17717:8:7"},"referencedDeclaration":3212,"src":"17717:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":958,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:7","nodeType":"VariableDeclaration","scope":969,"src":"17748:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":957,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":960,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:7","nodeType":"VariableDeclaration","scope":969,"src":"17785:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":959,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":962,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:7","nodeType":"VariableDeclaration","scope":969,"src":"17819:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":961,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":964,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:7","nodeType":"VariableDeclaration","scope":969,"src":"17852:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":963,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:7"},"returnParameters":{"id":968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":967,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:7","nodeType":"VariableDeclaration","scope":969,"src":"17896:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":966,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:7"},"scope":1053,"src":"17682:236:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":970,"nodeType":"StructuredDocumentation","src":"17924:1010:7","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":988,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:7","nodeType":"FunctionDefinition","parameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":973,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:7","nodeType":"VariableDeclaration","scope":988,"src":"18978:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":972,"nodeType":"UserDefinedTypeName","pathNode":{"id":971,"name":"IERC4626","nameLocations":["18978:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"18978:8:7"},"referencedDeclaration":3212,"src":"18978:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":975,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:7","nodeType":"VariableDeclaration","scope":988,"src":"19009:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":974,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":977,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:7","nodeType":"VariableDeclaration","scope":988,"src":"19051:29:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":976,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":979,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:7","nodeType":"VariableDeclaration","scope":988,"src":"19090:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":978,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":981,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:7","nodeType":"VariableDeclaration","scope":988,"src":"19126:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":980,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:7"},"returnParameters":{"id":987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":984,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:7","nodeType":"VariableDeclaration","scope":988,"src":"19170:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":983,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":986,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:7","nodeType":"VariableDeclaration","scope":988,"src":"19199:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":985,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:7"},"scope":1053,"src":"18939:286:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":989,"nodeType":"StructuredDocumentation","src":"19231:1458:7","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":1005,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:7","nodeType":"FunctionDefinition","parameters":{"id":999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":992,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:7","nodeType":"VariableDeclaration","scope":1005,"src":"20738:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":991,"nodeType":"UserDefinedTypeName","pathNode":{"id":990,"name":"IERC4626","nameLocations":["20738:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"20738:8:7"},"referencedDeclaration":3212,"src":"20738:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":994,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:7","nodeType":"VariableDeclaration","scope":1005,"src":"20769:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":993,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":996,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:7","nodeType":"VariableDeclaration","scope":1005,"src":"20801:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":995,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":998,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:7","nodeType":"VariableDeclaration","scope":1005,"src":"20844:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":997,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:7"},"returnParameters":{"id":1004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1001,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:7","nodeType":"VariableDeclaration","scope":1005,"src":"20899:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1000,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1003,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:7","nodeType":"VariableDeclaration","scope":1005,"src":"20936:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1002,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:7"},"scope":1053,"src":"20694:276:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1006,"nodeType":"StructuredDocumentation","src":"20976:382:7","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":1014,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:7","nodeType":"FunctionDefinition","parameters":{"id":1010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1009,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:7","nodeType":"VariableDeclaration","scope":1014,"src":"21387:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1008,"nodeType":"UserDefinedTypeName","pathNode":{"id":1007,"name":"IERC4626","nameLocations":["21387:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"21387:8:7"},"referencedDeclaration":3212,"src":"21387:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:7"},"returnParameters":{"id":1013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1012,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:7","nodeType":"VariableDeclaration","scope":1014,"src":"21433:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1011,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:7"},"scope":1053,"src":"21363:95:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1015,"nodeType":"StructuredDocumentation","src":"21464:441:7","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":1025,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:7","nodeType":"FunctionDefinition","parameters":{"id":1021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1018,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:7","nodeType":"VariableDeclaration","scope":1025,"src":"21949:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1017,"nodeType":"UserDefinedTypeName","pathNode":{"id":1016,"name":"IERC4626","nameLocations":["21949:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"21949:8:7"},"referencedDeclaration":3212,"src":"21949:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1020,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:7","nodeType":"VariableDeclaration","scope":1025,"src":"21980:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1019,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:7"},"returnParameters":{"id":1024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1023,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:7","nodeType":"VariableDeclaration","scope":1025,"src":"22032:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1022,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:7"},"scope":1053,"src":"21910:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"22059:281:7","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":1034,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:7","nodeType":"FunctionDefinition","parameters":{"id":1030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1029,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:7","nodeType":"VariableDeclaration","scope":1034,"src":"22375:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1028,"nodeType":"UserDefinedTypeName","pathNode":{"id":1027,"name":"IERC4626","nameLocations":["22375:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"22375:8:7"},"referencedDeclaration":3212,"src":"22375:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:7"},"returnParameters":{"id":1033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1032,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:7","nodeType":"VariableDeclaration","scope":1034,"src":"22421:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1031,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:7"},"scope":1053,"src":"22345:98:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"22449:521:7","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":1045,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:7","nodeType":"FunctionDefinition","parameters":{"id":1039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1038,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:7","nodeType":"VariableDeclaration","scope":1045,"src":"23010:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1037,"nodeType":"UserDefinedTypeName","pathNode":{"id":1036,"name":"IERC4626","nameLocations":["23010:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"23010:8:7"},"referencedDeclaration":3212,"src":"23010:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:7"},"returnParameters":{"id":1044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1041,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:7","nodeType":"VariableDeclaration","scope":1045,"src":"23061:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1040,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1043,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:7","nodeType":"VariableDeclaration","scope":1045,"src":"23091:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1042,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:7"},"scope":1053,"src":"22975:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1046,"nodeType":"StructuredDocumentation","src":"23342:202:7","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":1052,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:7","nodeType":"FunctionDefinition","parameters":{"id":1050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1049,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:7","nodeType":"VariableDeclaration","scope":1052,"src":"23572:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"},"typeName":{"id":1048,"nodeType":"UserDefinedTypeName","pathNode":{"id":1047,"name":"IAuthorizer","nameLocations":["23572:11:7"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"23572:11:7"},"referencedDeclaration":218,"src":"23572:11:7","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:7"},"returnParameters":{"id":1051,"nodeType":"ParameterList","parameters":[],"src":"23607:0:7"},"scope":1053,"src":"23549:59:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1054,"src":"586:23024:7","usedErrors":[],"usedEvents":[]}],"src":"46:23565:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[3290],"IERC4626":[3212],"IVaultErrors":[1420]},"id":1421,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1055,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1057,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1421,"sourceUnit":3213,"src":"72:75:8","symbolAliases":[{"foreign":{"id":1056,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1059,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1421,"sourceUnit":3291,"src":"148:72:8","symbolAliases":[{"foreign":{"id":1058,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1060,"nodeType":"StructuredDocumentation","src":"222:94:8","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1420,"linearizedBaseContracts":[1420],"name":"IVaultErrors","nameLocation":"326:12:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1061,"nodeType":"StructuredDocumentation","src":"576:149:8","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":1065,"name":"PoolAlreadyRegistered","nameLocation":"736:21:8","nodeType":"ErrorDefinition","parameters":{"id":1064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1063,"mutability":"mutable","name":"pool","nameLocation":"766:4:8","nodeType":"VariableDeclaration","scope":1065,"src":"758:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1062,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:8"},"src":"730:42:8"},{"documentation":{"id":1066,"nodeType":"StructuredDocumentation","src":"778:149:8","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":1070,"name":"PoolAlreadyInitialized","nameLocation":"938:22:8","nodeType":"ErrorDefinition","parameters":{"id":1069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1068,"mutability":"mutable","name":"pool","nameLocation":"969:4:8","nodeType":"VariableDeclaration","scope":1070,"src":"961:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1067,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:8"},"src":"932:43:8"},{"documentation":{"id":1071,"nodeType":"StructuredDocumentation","src":"981:99:8","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":1075,"name":"PoolNotRegistered","nameLocation":"1091:17:8","nodeType":"ErrorDefinition","parameters":{"id":1074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1073,"mutability":"mutable","name":"pool","nameLocation":"1117:4:8","nodeType":"VariableDeclaration","scope":1075,"src":"1109:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1072,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:8"},"src":"1085:38:8"},{"documentation":{"id":1076,"nodeType":"StructuredDocumentation","src":"1129:112:8","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":1080,"name":"PoolNotInitialized","nameLocation":"1252:18:8","nodeType":"ErrorDefinition","parameters":{"id":1079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1078,"mutability":"mutable","name":"pool","nameLocation":"1279:4:8","nodeType":"VariableDeclaration","scope":1080,"src":"1271:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1077,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:8"},"src":"1246:39:8"},{"documentation":{"id":1081,"nodeType":"StructuredDocumentation","src":"1291:274:8","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":1089,"name":"HookRegistrationFailed","nameLocation":"1576:22:8","nodeType":"ErrorDefinition","parameters":{"id":1088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1083,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:8","nodeType":"VariableDeclaration","scope":1089,"src":"1599:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1082,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1085,"mutability":"mutable","name":"pool","nameLocation":"1634:4:8","nodeType":"VariableDeclaration","scope":1089,"src":"1626:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1084,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1087,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:8","nodeType":"VariableDeclaration","scope":1089,"src":"1640:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1086,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:8"},"src":"1570:91:8"},{"documentation":{"id":1090,"nodeType":"StructuredDocumentation","src":"1667:136:8","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":1095,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:8","nodeType":"ErrorDefinition","parameters":{"id":1094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1093,"mutability":"mutable","name":"token","nameLocation":"1844:5:8","nodeType":"VariableDeclaration","scope":1095,"src":"1837:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1092,"nodeType":"UserDefinedTypeName","pathNode":{"id":1091,"name":"IERC20","nameLocations":["1837:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"1837:6:8"},"referencedDeclaration":3290,"src":"1837:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:8"},"src":"1808:43:8"},{"documentation":{"id":1096,"nodeType":"StructuredDocumentation","src":"1857:57:8","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":1098,"name":"MinTokens","nameLocation":"1925:9:8","nodeType":"ErrorDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[],"src":"1934:2:8"},"src":"1919:18:8"},{"documentation":{"id":1099,"nodeType":"StructuredDocumentation","src":"1943:57:8","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":1101,"name":"MaxTokens","nameLocation":"2011:9:8","nodeType":"ErrorDefinition","parameters":{"id":1100,"nodeType":"ParameterList","parameters":[],"src":"2020:2:8"},"src":"2005:18:8"},{"documentation":{"id":1102,"nodeType":"StructuredDocumentation","src":"2029:61:8","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":1104,"name":"InvalidToken","nameLocation":"2101:12:8","nodeType":"ErrorDefinition","parameters":{"id":1103,"nodeType":"ParameterList","parameters":[],"src":"2113:2:8"},"src":"2095:21:8"},{"documentation":{"id":1105,"nodeType":"StructuredDocumentation","src":"2122:86:8","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":1107,"name":"InvalidTokenType","nameLocation":"2219:16:8","nodeType":"ErrorDefinition","parameters":{"id":1106,"nodeType":"ParameterList","parameters":[],"src":"2235:2:8"},"src":"2213:25:8"},{"documentation":{"id":1108,"nodeType":"StructuredDocumentation","src":"2244:76:8","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":1110,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:8","nodeType":"ErrorDefinition","parameters":{"id":1109,"nodeType":"ParameterList","parameters":[],"src":"2356:2:8"},"src":"2325:34:8"},{"documentation":{"id":1111,"nodeType":"StructuredDocumentation","src":"2365:64:8","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":1113,"name":"InvalidTokenDecimals","nameLocation":"2440:20:8","nodeType":"ErrorDefinition","parameters":{"id":1112,"nodeType":"ParameterList","parameters":[],"src":"2460:2:8"},"src":"2434:29:8"},{"documentation":{"id":1114,"nodeType":"StructuredDocumentation","src":"2469:287:8","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":1122,"name":"TokensMismatch","nameLocation":"2767:14:8","nodeType":"ErrorDefinition","parameters":{"id":1121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1116,"mutability":"mutable","name":"pool","nameLocation":"2790:4:8","nodeType":"VariableDeclaration","scope":1122,"src":"2782:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1115,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1118,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:8","nodeType":"VariableDeclaration","scope":1122,"src":"2796:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1117,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1120,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:8","nodeType":"VariableDeclaration","scope":1122,"src":"2819:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1119,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:8"},"src":"2761:79:8"},{"documentation":{"id":1123,"nodeType":"StructuredDocumentation","src":"3071:85:8","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":1125,"name":"BalanceNotSettled","nameLocation":"3167:17:8","nodeType":"ErrorDefinition","parameters":{"id":1124,"nodeType":"ParameterList","parameters":[],"src":"3184:2:8"},"src":"3161:26:8"},{"documentation":{"id":1126,"nodeType":"StructuredDocumentation","src":"3193:97:8","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":1128,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:8","nodeType":"ErrorDefinition","parameters":{"id":1127,"nodeType":"ParameterList","parameters":[],"src":"3319:2:8"},"src":"3295:27:8"},{"documentation":{"id":1129,"nodeType":"StructuredDocumentation","src":"3328:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":1131,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:8","nodeType":"ErrorDefinition","parameters":{"id":1130,"nodeType":"ParameterList","parameters":[],"src":"3468:2:8"},"src":"3438:33:8"},{"documentation":{"id":1132,"nodeType":"StructuredDocumentation","src":"3477:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":1134,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:8","nodeType":"ErrorDefinition","parameters":{"id":1133,"nodeType":"ParameterList","parameters":[],"src":"3613:2:8"},"src":"3587:29:8"},{"documentation":{"id":1135,"nodeType":"StructuredDocumentation","src":"3622:104:8","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":1137,"name":"AfterSwapHookFailed","nameLocation":"3737:19:8","nodeType":"ErrorDefinition","parameters":{"id":1136,"nodeType":"ParameterList","parameters":[],"src":"3756:2:8"},"src":"3731:28:8"},{"documentation":{"id":1138,"nodeType":"StructuredDocumentation","src":"3765:111:8","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":1140,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:8","nodeType":"ErrorDefinition","parameters":{"id":1139,"nodeType":"ParameterList","parameters":[],"src":"3913:2:8"},"src":"3881:35:8"},{"documentation":{"id":1141,"nodeType":"StructuredDocumentation","src":"3922:110:8","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":1143,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:8","nodeType":"ErrorDefinition","parameters":{"id":1142,"nodeType":"ParameterList","parameters":[],"src":"4068:2:8"},"src":"4037:34:8"},{"documentation":{"id":1144,"nodeType":"StructuredDocumentation","src":"4077:113:8","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":1146,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:8","nodeType":"ErrorDefinition","parameters":{"id":1145,"nodeType":"ParameterList","parameters":[],"src":"4229:2:8"},"src":"4195:37:8"},{"documentation":{"id":1147,"nodeType":"StructuredDocumentation","src":"4238:112:8","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":1149,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:8","nodeType":"ErrorDefinition","parameters":{"id":1148,"nodeType":"ParameterList","parameters":[],"src":"4388:2:8"},"src":"4355:36:8"},{"documentation":{"id":1150,"nodeType":"StructuredDocumentation","src":"4397:116:8","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":1152,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:8","nodeType":"ErrorDefinition","parameters":{"id":1151,"nodeType":"ParameterList","parameters":[],"src":"4555:2:8"},"src":"4518:40:8"},{"documentation":{"id":1153,"nodeType":"StructuredDocumentation","src":"4564:115:8","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":1155,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:8","nodeType":"ErrorDefinition","parameters":{"id":1154,"nodeType":"ParameterList","parameters":[],"src":"4720:2:8"},"src":"4684:39:8"},{"documentation":{"id":1156,"nodeType":"StructuredDocumentation","src":"4729:115:8","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":1158,"name":"RouterNotTrusted","nameLocation":"4855:16:8","nodeType":"ErrorDefinition","parameters":{"id":1157,"nodeType":"ParameterList","parameters":[],"src":"4871:2:8"},"src":"4849:25:8"},{"documentation":{"id":1159,"nodeType":"StructuredDocumentation","src":"5097:47:8","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":1161,"name":"AmountGivenZero","nameLocation":"5155:15:8","nodeType":"ErrorDefinition","parameters":{"id":1160,"nodeType":"ParameterList","parameters":[],"src":"5170:2:8"},"src":"5149:24:8"},{"documentation":{"id":1162,"nodeType":"StructuredDocumentation","src":"5179:58:8","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":1164,"name":"CannotSwapSameToken","nameLocation":"5248:19:8","nodeType":"ErrorDefinition","parameters":{"id":1163,"nodeType":"ParameterList","parameters":[],"src":"5267:2:8"},"src":"5242:28:8"},{"documentation":{"id":1165,"nodeType":"StructuredDocumentation","src":"5276:137:8","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":1170,"name":"TokenNotRegistered","nameLocation":"5424:18:8","nodeType":"ErrorDefinition","parameters":{"id":1169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"token","nameLocation":"5450:5:8","nodeType":"VariableDeclaration","scope":1170,"src":"5443:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1167,"nodeType":"UserDefinedTypeName","pathNode":{"id":1166,"name":"IERC20","nameLocations":["5443:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"5443:6:8"},"referencedDeclaration":3290,"src":"5443:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:8"},"src":"5418:39:8"},{"documentation":{"id":1171,"nodeType":"StructuredDocumentation","src":"5463:215:8","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":1177,"name":"SwapLimit","nameLocation":"5689:9:8","nodeType":"ErrorDefinition","parameters":{"id":1176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1173,"mutability":"mutable","name":"amount","nameLocation":"5707:6:8","nodeType":"VariableDeclaration","scope":1177,"src":"5699:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1172,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1175,"mutability":"mutable","name":"limit","nameLocation":"5723:5:8","nodeType":"VariableDeclaration","scope":1177,"src":"5715:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1174,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:8"},"src":"5683:47:8"},{"documentation":{"id":1178,"nodeType":"StructuredDocumentation","src":"5736:228:8","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":1184,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:8","nodeType":"ErrorDefinition","parameters":{"id":1183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1180,"mutability":"mutable","name":"amount","nameLocation":"6005:6:8","nodeType":"VariableDeclaration","scope":1184,"src":"5997:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1179,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1182,"mutability":"mutable","name":"limit","nameLocation":"6021:5:8","nodeType":"VariableDeclaration","scope":1184,"src":"6013:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1181,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:8"},"src":"5969:59:8"},{"documentation":{"id":1185,"nodeType":"StructuredDocumentation","src":"6034:87:8","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":1187,"name":"TradeAmountTooSmall","nameLocation":"6132:19:8","nodeType":"ErrorDefinition","parameters":{"id":1186,"nodeType":"ParameterList","parameters":[],"src":"6151:2:8"},"src":"6126:28:8"},{"documentation":{"id":1188,"nodeType":"StructuredDocumentation","src":"6381:45:8","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":1190,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:8","nodeType":"ErrorDefinition","parameters":{"id":1189,"nodeType":"ParameterList","parameters":[],"src":"6460:2:8"},"src":"6431:32:8"},{"documentation":{"id":1191,"nodeType":"StructuredDocumentation","src":"6469:264:8","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":1200,"name":"AmountInAboveMax","nameLocation":"6744:16:8","nodeType":"ErrorDefinition","parameters":{"id":1199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1194,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:8","nodeType":"VariableDeclaration","scope":1200,"src":"6761:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1193,"nodeType":"UserDefinedTypeName","pathNode":{"id":1192,"name":"IERC20","nameLocations":["6761:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"6761:6:8"},"referencedDeclaration":3290,"src":"6761:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1196,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:8","nodeType":"VariableDeclaration","scope":1200,"src":"6777:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1195,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1198,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:8","nodeType":"VariableDeclaration","scope":1200,"src":"6795:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1197,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:8"},"src":"6738:78:8"},{"documentation":{"id":1201,"nodeType":"StructuredDocumentation","src":"6822:269:8","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":1210,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:8","nodeType":"ErrorDefinition","parameters":{"id":1209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1204,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:8","nodeType":"VariableDeclaration","scope":1210,"src":"7131:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1203,"nodeType":"UserDefinedTypeName","pathNode":{"id":1202,"name":"IERC20","nameLocations":["7131:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"7131:6:8"},"referencedDeclaration":3290,"src":"7131:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1206,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:8","nodeType":"VariableDeclaration","scope":1210,"src":"7147:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1205,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1208,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:8","nodeType":"VariableDeclaration","scope":1210,"src":"7165:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1207,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:8"},"src":"7096:90:8"},{"documentation":{"id":1211,"nodeType":"StructuredDocumentation","src":"7192:245:8","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":1217,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:8","nodeType":"ErrorDefinition","parameters":{"id":1216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1213,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:8","nodeType":"VariableDeclaration","scope":1217,"src":"7469:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1212,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1215,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:8","nodeType":"VariableDeclaration","scope":1217,"src":"7488:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1214,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:8"},"src":"7442:68:8"},{"documentation":{"id":1218,"nodeType":"StructuredDocumentation","src":"7516:75:8","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":1220,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:8","nodeType":"ErrorDefinition","parameters":{"id":1219,"nodeType":"ParameterList","parameters":[],"src":"7634:2:8"},"src":"7596:41:8"},{"documentation":{"id":1221,"nodeType":"StructuredDocumentation","src":"7643:68:8","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":1223,"name":"DoesNotSupportDonation","nameLocation":"7722:22:8","nodeType":"ErrorDefinition","parameters":{"id":1222,"nodeType":"ParameterList","parameters":[],"src":"7744:2:8"},"src":"7716:31:8"},{"documentation":{"id":1224,"nodeType":"StructuredDocumentation","src":"7977:48:8","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":1226,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:8","nodeType":"ErrorDefinition","parameters":{"id":1225,"nodeType":"ParameterList","parameters":[],"src":"8062:2:8"},"src":"8030:35:8"},{"documentation":{"id":1227,"nodeType":"StructuredDocumentation","src":"8071:269:8","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":1236,"name":"AmountOutBelowMin","nameLocation":"8351:17:8","nodeType":"ErrorDefinition","parameters":{"id":1235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1230,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:8","nodeType":"VariableDeclaration","scope":1236,"src":"8369:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1229,"nodeType":"UserDefinedTypeName","pathNode":{"id":1228,"name":"IERC20","nameLocations":["8369:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"8369:6:8"},"referencedDeclaration":3290,"src":"8369:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1232,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:8","nodeType":"VariableDeclaration","scope":1236,"src":"8386:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1231,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1234,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:8","nodeType":"VariableDeclaration","scope":1236,"src":"8405:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1233,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:8"},"src":"8345:82:8"},{"documentation":{"id":1237,"nodeType":"StructuredDocumentation","src":"8433:276:8","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":1246,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:8","nodeType":"ErrorDefinition","parameters":{"id":1245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1240,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:8","nodeType":"VariableDeclaration","scope":1246,"src":"8750:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1239,"nodeType":"UserDefinedTypeName","pathNode":{"id":1238,"name":"IERC20","nameLocations":["8750:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"8750:6:8"},"referencedDeclaration":3290,"src":"8750:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1242,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:8","nodeType":"VariableDeclaration","scope":1246,"src":"8767:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1241,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1244,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:8","nodeType":"VariableDeclaration","scope":1246,"src":"8786:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1243,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:8"},"src":"8714:94:8"},{"documentation":{"id":1247,"nodeType":"StructuredDocumentation","src":"8814:228:8","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":1253,"name":"BptAmountInAboveMax","nameLocation":"9053:19:8","nodeType":"ErrorDefinition","parameters":{"id":1252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1249,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:8","nodeType":"VariableDeclaration","scope":1253,"src":"9073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1248,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1251,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:8","nodeType":"VariableDeclaration","scope":1253,"src":"9091:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1250,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:8"},"src":"9047:65:8"},{"documentation":{"id":1254,"nodeType":"StructuredDocumentation","src":"9118:77:8","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":1256,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:8","nodeType":"ErrorDefinition","parameters":{"id":1255,"nodeType":"ParameterList","parameters":[],"src":"9241:2:8"},"src":"9200:44:8"},{"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"9463:332:8","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":1259,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:8","nodeType":"ErrorDefinition","parameters":{"id":1258,"nodeType":"ParameterList","parameters":[],"src":"9838:2:8"},"src":"9800:41:8"},{"documentation":{"id":1260,"nodeType":"StructuredDocumentation","src":"9847:430:8","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":1262,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:8","nodeType":"ErrorDefinition","parameters":{"id":1261,"nodeType":"ParameterList","parameters":[],"src":"10311:2:8"},"src":"10282:32:8"},{"documentation":{"id":1263,"nodeType":"StructuredDocumentation","src":"10320:433:8","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":1265,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:8","nodeType":"ErrorDefinition","parameters":{"id":1264,"nodeType":"ParameterList","parameters":[],"src":"10788:2:8"},"src":"10758:33:8"},{"documentation":{"id":1266,"nodeType":"StructuredDocumentation","src":"10797:646:8","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":1268,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:8","nodeType":"ErrorDefinition","parameters":{"id":1267,"nodeType":"ParameterList","parameters":[],"src":"11473:2:8"},"src":"11448:28:8"},{"documentation":{"id":1269,"nodeType":"StructuredDocumentation","src":"11482:107:8","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":1271,"name":"PercentageAboveMax","nameLocation":"11600:18:8","nodeType":"ErrorDefinition","parameters":{"id":1270,"nodeType":"ParameterList","parameters":[],"src":"11618:2:8"},"src":"11594:27:8"},{"documentation":{"id":1272,"nodeType":"StructuredDocumentation","src":"11842:78:8","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":1274,"name":"QueriesDisabled","nameLocation":"11931:15:8","nodeType":"ErrorDefinition","parameters":{"id":1273,"nodeType":"ParameterList","parameters":[],"src":"11946:2:8"},"src":"11925:24:8"},{"documentation":{"id":1275,"nodeType":"StructuredDocumentation","src":"11955:84:8","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":1277,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:8","nodeType":"ErrorDefinition","parameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"12076:2:8"},"src":"12044:35:8"},{"documentation":{"id":1278,"nodeType":"StructuredDocumentation","src":"12302:104:8","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":1282,"name":"PoolInRecoveryMode","nameLocation":"12417:18:8","nodeType":"ErrorDefinition","parameters":{"id":1281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1280,"mutability":"mutable","name":"pool","nameLocation":"12444:4:8","nodeType":"VariableDeclaration","scope":1282,"src":"12436:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1279,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:8"},"src":"12411:39:8"},{"documentation":{"id":1283,"nodeType":"StructuredDocumentation","src":"12456:101:8","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":1287,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:8","nodeType":"ErrorDefinition","parameters":{"id":1286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1285,"mutability":"mutable","name":"pool","nameLocation":"12598:4:8","nodeType":"VariableDeclaration","scope":1287,"src":"12590:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1284,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:8"},"src":"12562:42:8"},{"documentation":{"id":1288,"nodeType":"StructuredDocumentation","src":"12828:206:8","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":1292,"name":"SenderIsNotVault","nameLocation":"13045:16:8","nodeType":"ErrorDefinition","parameters":{"id":1291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1290,"mutability":"mutable","name":"sender","nameLocation":"13070:6:8","nodeType":"VariableDeclaration","scope":1292,"src":"13062:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1289,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:8"},"src":"13039:39:8"},{"documentation":{"id":1293,"nodeType":"StructuredDocumentation","src":"13303:79:8","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":1295,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:8","nodeType":"ErrorDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[],"src":"13425:2:8"},"src":"13387:41:8"},{"documentation":{"id":1296,"nodeType":"StructuredDocumentation","src":"13434:73:8","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":1298,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:8","nodeType":"ErrorDefinition","parameters":{"id":1297,"nodeType":"ParameterList","parameters":[],"src":"13551:2:8"},"src":"13512:42:8"},{"documentation":{"id":1299,"nodeType":"StructuredDocumentation","src":"13560:76:8","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":1301,"name":"VaultPaused","nameLocation":"13647:11:8","nodeType":"ErrorDefinition","parameters":{"id":1300,"nodeType":"ParameterList","parameters":[],"src":"13658:2:8"},"src":"13641:20:8"},{"documentation":{"id":1302,"nodeType":"StructuredDocumentation","src":"13667:73:8","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":1304,"name":"VaultNotPaused","nameLocation":"13751:14:8","nodeType":"ErrorDefinition","parameters":{"id":1303,"nodeType":"ParameterList","parameters":[],"src":"13765:2:8"},"src":"13745:23:8"},{"documentation":{"id":1305,"nodeType":"StructuredDocumentation","src":"13774:79:8","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":1307,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:8","nodeType":"ErrorDefinition","parameters":{"id":1306,"nodeType":"ParameterList","parameters":[],"src":"13887:2:8"},"src":"13858:32:8"},{"documentation":{"id":1308,"nodeType":"StructuredDocumentation","src":"13896:123:8","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":1312,"name":"PoolPaused","nameLocation":"14030:10:8","nodeType":"ErrorDefinition","parameters":{"id":1311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1310,"mutability":"mutable","name":"pool","nameLocation":"14049:4:8","nodeType":"VariableDeclaration","scope":1312,"src":"14041:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1309,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:8"},"src":"14024:31:8"},{"documentation":{"id":1313,"nodeType":"StructuredDocumentation","src":"14061:124:8","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":1317,"name":"PoolNotPaused","nameLocation":"14196:13:8","nodeType":"ErrorDefinition","parameters":{"id":1316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1315,"mutability":"mutable","name":"pool","nameLocation":"14218:4:8","nodeType":"VariableDeclaration","scope":1317,"src":"14210:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1314,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:8"},"src":"14190:34:8"},{"documentation":{"id":1318,"nodeType":"StructuredDocumentation","src":"14230:119:8","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":1322,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:8","nodeType":"ErrorDefinition","parameters":{"id":1321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1320,"mutability":"mutable","name":"pool","nameLocation":"14391:4:8","nodeType":"VariableDeclaration","scope":1322,"src":"14383:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1319,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:8"},"src":"14354:43:8"},{"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"14628:163:8","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":1328,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:8","nodeType":"ErrorDefinition","parameters":{"id":1327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1326,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:8","nodeType":"VariableDeclaration","scope":1328,"src":"14827:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1325,"nodeType":"UserDefinedTypeName","pathNode":{"id":1324,"name":"IERC4626","nameLocations":["14827:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"14827:8:8"},"referencedDeclaration":3212,"src":"14827:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:8"},"src":"14796:54:8"},{"documentation":{"id":1329,"nodeType":"StructuredDocumentation","src":"14856:159:8","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":1334,"name":"BufferNotInitialized","nameLocation":"15026:20:8","nodeType":"ErrorDefinition","parameters":{"id":1333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1332,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:8","nodeType":"VariableDeclaration","scope":1334,"src":"15047:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1331,"nodeType":"UserDefinedTypeName","pathNode":{"id":1330,"name":"IERC4626","nameLocations":["15047:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"15047:8:8"},"referencedDeclaration":3212,"src":"15047:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:8"},"src":"15020:50:8"},{"documentation":{"id":1335,"nodeType":"StructuredDocumentation","src":"15076:90:8","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":1337,"name":"NotEnoughBufferShares","nameLocation":"15177:21:8","nodeType":"ErrorDefinition","parameters":{"id":1336,"nodeType":"ParameterList","parameters":[],"src":"15198:2:8"},"src":"15171:30:8"},{"documentation":{"id":1338,"nodeType":"StructuredDocumentation","src":"15207:436:8","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":1345,"name":"WrongUnderlyingToken","nameLocation":"15654:20:8","nodeType":"ErrorDefinition","parameters":{"id":1344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1341,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:8","nodeType":"VariableDeclaration","scope":1345,"src":"15675:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1340,"nodeType":"UserDefinedTypeName","pathNode":{"id":1339,"name":"IERC4626","nameLocations":["15675:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"15675:8:8"},"referencedDeclaration":3212,"src":"15675:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1343,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:8","nodeType":"VariableDeclaration","scope":1345,"src":"15698:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1342,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:8"},"src":"15648:75:8"},{"documentation":{"id":1346,"nodeType":"StructuredDocumentation","src":"15729:322:8","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":1351,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:8","nodeType":"ErrorDefinition","parameters":{"id":1350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1349,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:8","nodeType":"VariableDeclaration","scope":1351,"src":"16085:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1348,"nodeType":"UserDefinedTypeName","pathNode":{"id":1347,"name":"IERC4626","nameLocations":["16085:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"16085:8:8"},"referencedDeclaration":3212,"src":"16085:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:8"},"src":"16056:52:8"},{"documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"16114:183:8","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":1357,"name":"WrapAmountTooSmall","nameLocation":"16308:18:8","nodeType":"ErrorDefinition","parameters":{"id":1356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1355,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:8","nodeType":"VariableDeclaration","scope":1357,"src":"16327:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1354,"nodeType":"UserDefinedTypeName","pathNode":{"id":1353,"name":"IERC4626","nameLocations":["16327:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"16327:8:8"},"referencedDeclaration":3212,"src":"16327:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:8"},"src":"16302:48:8"},{"documentation":{"id":1358,"nodeType":"StructuredDocumentation","src":"16356:70:8","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":1360,"name":"VaultBuffersArePaused","nameLocation":"16437:21:8","nodeType":"ErrorDefinition","parameters":{"id":1359,"nodeType":"ParameterList","parameters":[],"src":"16458:2:8"},"src":"16431:30:8"},{"documentation":{"id":1361,"nodeType":"StructuredDocumentation","src":"16467:58:8","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":1363,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:8","nodeType":"ErrorDefinition","parameters":{"id":1362,"nodeType":"ParameterList","parameters":[],"src":"16563:2:8"},"src":"16530:36:8"},{"documentation":{"id":1364,"nodeType":"StructuredDocumentation","src":"16572:60:8","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":1366,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:8","nodeType":"ErrorDefinition","parameters":{"id":1365,"nodeType":"ParameterList","parameters":[],"src":"16667:2:8"},"src":"16637:33:8"},{"documentation":{"id":1367,"nodeType":"StructuredDocumentation","src":"16676:173:8","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":1371,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:8","nodeType":"ErrorDefinition","parameters":{"id":1370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1369,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:8","nodeType":"VariableDeclaration","scope":1371,"src":"16884:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1368,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:8"},"src":"16854:51:8"},{"documentation":{"id":1372,"nodeType":"StructuredDocumentation","src":"16911:97:8","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":1381,"name":"NotEnoughUnderlying","nameLocation":"17019:19:8","nodeType":"ErrorDefinition","parameters":{"id":1380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1375,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:8","nodeType":"VariableDeclaration","scope":1381,"src":"17039:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1374,"nodeType":"UserDefinedTypeName","pathNode":{"id":1373,"name":"IERC4626","nameLocations":["17039:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"17039:8:8"},"referencedDeclaration":3212,"src":"17039:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1377,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:8","nodeType":"VariableDeclaration","scope":1381,"src":"17062:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1376,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1379,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:8","nodeType":"VariableDeclaration","scope":1381,"src":"17096:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1378,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:8"},"src":"17013:115:8"},{"documentation":{"id":1382,"nodeType":"StructuredDocumentation","src":"17134:94:8","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":1391,"name":"NotEnoughWrapped","nameLocation":"17239:16:8","nodeType":"ErrorDefinition","parameters":{"id":1390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1385,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:8","nodeType":"VariableDeclaration","scope":1391,"src":"17256:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1384,"nodeType":"UserDefinedTypeName","pathNode":{"id":1383,"name":"IERC4626","nameLocations":["17256:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"17256:8:8"},"referencedDeclaration":3212,"src":"17256:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1387,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:8","nodeType":"VariableDeclaration","scope":1391,"src":"17279:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1386,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1389,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:8","nodeType":"VariableDeclaration","scope":1391,"src":"17310:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1388,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:8"},"src":"17233:106:8"},{"documentation":{"id":1392,"nodeType":"StructuredDocumentation","src":"17345:76:8","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":1398,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:8","nodeType":"ErrorDefinition","parameters":{"id":1397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1394,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:8","nodeType":"VariableDeclaration","scope":1398,"src":"17453:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1393,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1396,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:8","nodeType":"VariableDeclaration","scope":1398,"src":"17475:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1395,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:8"},"src":"17426:74:8"},{"documentation":{"id":1399,"nodeType":"StructuredDocumentation","src":"17727:87:8","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":1401,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:8","nodeType":"ErrorDefinition","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[],"src":"17858:2:8"},"src":"17819:42:8"},{"documentation":{"id":1402,"nodeType":"StructuredDocumentation","src":"17867:48:8","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":1404,"name":"CannotReceiveEth","nameLocation":"17926:16:8","nodeType":"ErrorDefinition","parameters":{"id":1403,"nodeType":"ParameterList","parameters":[],"src":"17942:2:8"},"src":"17920:25:8"},{"documentation":{"id":1405,"nodeType":"StructuredDocumentation","src":"17951:156:8","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":1407,"name":"NotVaultDelegateCall","nameLocation":"18118:20:8","nodeType":"ErrorDefinition","parameters":{"id":1406,"nodeType":"ParameterList","parameters":[],"src":"18138:2:8"},"src":"18112:29:8"},{"documentation":{"id":1408,"nodeType":"StructuredDocumentation","src":"18147:89:8","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":1410,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:8","nodeType":"ErrorDefinition","parameters":{"id":1409,"nodeType":"ParameterList","parameters":[],"src":"18276:2:8"},"src":"18241:38:8"},{"documentation":{"id":1411,"nodeType":"StructuredDocumentation","src":"18285:96:8","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1413,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:8","nodeType":"ErrorDefinition","parameters":{"id":1412,"nodeType":"ParameterList","parameters":[],"src":"18428:2:8"},"src":"18386:45:8"},{"documentation":{"id":1414,"nodeType":"StructuredDocumentation","src":"18437:85:8","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":1416,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:8","nodeType":"ErrorDefinition","parameters":{"id":1415,"nodeType":"ParameterList","parameters":[],"src":"18558:2:8"},"src":"18527:34:8"},{"documentation":{"id":1417,"nodeType":"StructuredDocumentation","src":"18567:54:8","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":1419,"name":"QuoteResultSpoofed","nameLocation":"18632:18:8","nodeType":"ErrorDefinition","parameters":{"id":1418,"nodeType":"ParameterList","parameters":[],"src":"18650:2:8"},"src":"18626:27:8"}],"scope":1421,"src":"316:18339:8","usedErrors":[1065,1070,1075,1080,1089,1095,1098,1101,1104,1107,1110,1113,1122,1125,1128,1131,1134,1137,1140,1143,1146,1149,1152,1155,1158,1161,1164,1170,1177,1184,1187,1190,1200,1210,1217,1220,1223,1226,1236,1246,1253,1256,1259,1262,1265,1268,1271,1274,1277,1282,1287,1292,1295,1298,1301,1304,1307,1312,1317,1322,1328,1334,1337,1345,1351,1357,1360,1363,1366,1371,1381,1391,1398,1401,1404,1407,1410,1413,1416,1419],"usedEvents":[]}],"src":"46:18610:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AddLiquidityParams":[2475],"AfterSwapParams":[2453],"BufferWrapOrUnwrapParams":[2514],"FEE_BITLENGTH":[2517],"FEE_SCALING_FACTOR":[2520],"HookFlags":[2279],"HooksConfig":[2303],"IAuthorizer":[218],"IERC20":[3290],"IERC4626":[3212],"IHooks":[420],"IProtocolFeeController":[725],"IRateProvider":[24],"IVaultEvents":[1659],"LiquidityManagement":[2232],"MAX_FEE_PERCENTAGE":[2523],"PoolConfig":[2257],"PoolConfigBits":[2234],"PoolData":[2381],"PoolRoleAccounts":[2329],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"RemoveLiquidityParams":[2496],"Rounding":[2384],"SwapKind":[2387],"SwapState":[2313],"TokenConfig":[2346],"TokenInfo":[2356],"TokenType":[2333],"VaultState":[2321],"VaultSwapParams":[2406],"WrappingDirection":[2499]},"id":1660,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1422,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":3213,"src":"72:75:9","symbolAliases":[{"foreign":{"id":1423,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"81:8:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":3291,"src":"148:72:9","symbolAliases":[{"foreign":{"id":1425,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"157:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1428,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":726,"src":"222:70:9","symbolAliases":[{"foreign":{"id":1427,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":725,"src":"231:22:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":219,"src":"293:48:9","symbolAliases":[{"foreign":{"id":1429,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"302:11:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":421,"src":"342:38:9","symbolAliases":[{"foreign":{"id":1431,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"351:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1433,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":2524,"src":"381:26:9","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":1434,"nodeType":"StructuredDocumentation","src":"409:91:9","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1659,"linearizedBaseContracts":[1659],"name":"IVaultEvents","nameLocation":"510:12:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1435,"nodeType":"StructuredDocumentation","src":"529:657:9","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":1458,"name":"PoolRegistered","nameLocation":"1197:14:9","nodeType":"EventDefinition","parameters":{"id":1457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1437,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:9","nodeType":"VariableDeclaration","scope":1458,"src":"1221:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1436,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1439,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:9","nodeType":"VariableDeclaration","scope":1458,"src":"1251:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1438,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1443,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:9","nodeType":"VariableDeclaration","scope":1458,"src":"1284:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1441,"nodeType":"UserDefinedTypeName","pathNode":{"id":1440,"name":"TokenConfig","nameLocations":["1284:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2346,"src":"1284:11:9"},"referencedDeclaration":2346,"src":"1284:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2346_storage_ptr","typeString":"struct TokenConfig"}},"id":1442,"nodeType":"ArrayTypeName","src":"1284:13:9","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1445,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:9","nodeType":"VariableDeclaration","scope":1458,"src":"1319:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1444,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1447,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:9","nodeType":"VariableDeclaration","scope":1458,"src":"1354:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1446,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1450,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:9","nodeType":"VariableDeclaration","scope":1458,"src":"1389:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1449,"nodeType":"UserDefinedTypeName","pathNode":{"id":1448,"name":"PoolRoleAccounts","nameLocations":["1389:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2329,"src":"1389:16:9"},"referencedDeclaration":2329,"src":"1389:16:9","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1453,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:9","nodeType":"VariableDeclaration","scope":1458,"src":"1428:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2303_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1452,"nodeType":"UserDefinedTypeName","pathNode":{"id":1451,"name":"HooksConfig","nameLocations":["1428:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2303,"src":"1428:11:9"},"referencedDeclaration":2303,"src":"1428:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2303_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":1456,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:9","nodeType":"VariableDeclaration","scope":1458,"src":"1461:39:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1455,"nodeType":"UserDefinedTypeName","pathNode":{"id":1454,"name":"LiquidityManagement","nameLocations":["1461:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"1461:19:9"},"referencedDeclaration":2232,"src":"1461:19:9","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:9"},"src":"1191:316:9"},{"anonymous":false,"documentation":{"id":1459,"nodeType":"StructuredDocumentation","src":"1513:120:9","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":1463,"name":"PoolInitialized","nameLocation":"1644:15:9","nodeType":"EventDefinition","parameters":{"id":1462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1461,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:9","nodeType":"VariableDeclaration","scope":1463,"src":"1660:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1460,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:9"},"src":"1638:44:9"},{"anonymous":false,"documentation":{"id":1464,"nodeType":"StructuredDocumentation","src":"1688:478:9","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":1482,"name":"Swap","nameLocation":"2177:4:9","nodeType":"EventDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1466,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:9","nodeType":"VariableDeclaration","scope":1482,"src":"2191:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1465,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1469,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:9","nodeType":"VariableDeclaration","scope":1482,"src":"2221:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1468,"nodeType":"UserDefinedTypeName","pathNode":{"id":1467,"name":"IERC20","nameLocations":["2221:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2221:6:9"},"referencedDeclaration":3290,"src":"2221:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1472,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:9","nodeType":"VariableDeclaration","scope":1482,"src":"2253:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1471,"nodeType":"UserDefinedTypeName","pathNode":{"id":1470,"name":"IERC20","nameLocations":["2253:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2253:6:9"},"referencedDeclaration":3290,"src":"2253:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1474,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:9","nodeType":"VariableDeclaration","scope":1482,"src":"2286:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1473,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1476,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:9","nodeType":"VariableDeclaration","scope":1482,"src":"2312:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1475,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1478,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:9","nodeType":"VariableDeclaration","scope":1482,"src":"2339:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1477,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1480,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:9","nodeType":"VariableDeclaration","scope":1482,"src":"2374:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1479,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:9"},"src":"2171:231:9"},{"anonymous":false,"documentation":{"id":1483,"nodeType":"StructuredDocumentation","src":"2408:352:9","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":1494,"name":"Wrap","nameLocation":"2771:4:9","nodeType":"EventDefinition","parameters":{"id":1493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1486,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:9","nodeType":"VariableDeclaration","scope":1494,"src":"2785:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1485,"nodeType":"UserDefinedTypeName","pathNode":{"id":1484,"name":"IERC4626","nameLocations":["2785:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"2785:8:9"},"referencedDeclaration":3212,"src":"2785:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1488,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:9","nodeType":"VariableDeclaration","scope":1494,"src":"2824:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1487,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1490,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:9","nodeType":"VariableDeclaration","scope":1494,"src":"2861:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1489,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1492,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:9","nodeType":"VariableDeclaration","scope":1494,"src":"2891:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1491,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:9"},"src":"2765:155:9"},{"anonymous":false,"documentation":{"id":1495,"nodeType":"StructuredDocumentation","src":"2926:355:9","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":1506,"name":"Unwrap","nameLocation":"3292:6:9","nodeType":"EventDefinition","parameters":{"id":1505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1498,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:9","nodeType":"VariableDeclaration","scope":1506,"src":"3308:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1497,"nodeType":"UserDefinedTypeName","pathNode":{"id":1496,"name":"IERC4626","nameLocations":["3308:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"3308:8:9"},"referencedDeclaration":3212,"src":"3308:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1500,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:9","nodeType":"VariableDeclaration","scope":1506,"src":"3347:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1499,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1502,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:9","nodeType":"VariableDeclaration","scope":1506,"src":"3377:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1501,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1504,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:9","nodeType":"VariableDeclaration","scope":1506,"src":"3414:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1503,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:9"},"src":"3286:157:9"},{"anonymous":false,"documentation":{"id":1507,"nodeType":"StructuredDocumentation","src":"3449:562:9","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":1524,"name":"LiquidityAdded","nameLocation":"4022:14:9","nodeType":"EventDefinition","parameters":{"id":1523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1509,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:9","nodeType":"VariableDeclaration","scope":1524,"src":"4046:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1508,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1511,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:9","nodeType":"VariableDeclaration","scope":1524,"src":"4076:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1510,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1514,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:9","nodeType":"VariableDeclaration","scope":1524,"src":"4119:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"},"typeName":{"id":1513,"nodeType":"UserDefinedTypeName","pathNode":{"id":1512,"name":"AddLiquidityKind","nameLocations":["4119:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2459,"src":"4119:16:9"},"referencedDeclaration":2459,"src":"4119:16:9","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1516,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:9","nodeType":"VariableDeclaration","scope":1524,"src":"4158:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1515,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1519,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:9","nodeType":"VariableDeclaration","scope":1524,"src":"4187:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1517,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1518,"nodeType":"ArrayTypeName","src":"4187:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1522,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:9","nodeType":"VariableDeclaration","scope":1524,"src":"4222:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1520,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1521,"nodeType":"ArrayTypeName","src":"4222:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:9"},"src":"4016:240:9"},{"anonymous":false,"documentation":{"id":1525,"nodeType":"StructuredDocumentation","src":"4262:548:9","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":1542,"name":"LiquidityRemoved","nameLocation":"4821:16:9","nodeType":"EventDefinition","parameters":{"id":1541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1527,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:9","nodeType":"VariableDeclaration","scope":1542,"src":"4847:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1526,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1529,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:9","nodeType":"VariableDeclaration","scope":1542,"src":"4877:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1528,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1532,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:9","nodeType":"VariableDeclaration","scope":1542,"src":"4920:32:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1531,"nodeType":"UserDefinedTypeName","pathNode":{"id":1530,"name":"RemoveLiquidityKind","nameLocations":["4920:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2480,"src":"4920:19:9"},"referencedDeclaration":2480,"src":"4920:19:9","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1534,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:9","nodeType":"VariableDeclaration","scope":1542,"src":"4962:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1533,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1537,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:9","nodeType":"VariableDeclaration","scope":1542,"src":"4991:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1535,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1536,"nodeType":"ArrayTypeName","src":"4991:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1540,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:9","nodeType":"VariableDeclaration","scope":1542,"src":"5028:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1538,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1539,"nodeType":"ArrayTypeName","src":"5028:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:9"},"src":"4815:247:9"},{"anonymous":false,"documentation":{"id":1543,"nodeType":"StructuredDocumentation","src":"5068:114:9","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":1547,"name":"VaultPausedStateChanged","nameLocation":"5193:23:9","nodeType":"EventDefinition","parameters":{"id":1546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1545,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:9","nodeType":"VariableDeclaration","scope":1547,"src":"5217:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1544,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:9"},"src":"5187:43:9"},{"anonymous":false,"documentation":{"id":1548,"nodeType":"StructuredDocumentation","src":"5236:87:9","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":1550,"name":"VaultQueriesDisabled","nameLocation":"5334:20:9","nodeType":"EventDefinition","parameters":{"id":1549,"nodeType":"ParameterList","parameters":[],"src":"5354:2:9"},"src":"5328:29:9"},{"anonymous":false,"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"5363:85:9","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":1553,"name":"VaultQueriesEnabled","nameLocation":"5459:19:9","nodeType":"EventDefinition","parameters":{"id":1552,"nodeType":"ParameterList","parameters":[],"src":"5478:2:9"},"src":"5453:28:9"},{"anonymous":false,"documentation":{"id":1554,"nodeType":"StructuredDocumentation","src":"5487:171:9","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":1560,"name":"PoolPausedStateChanged","nameLocation":"5669:22:9","nodeType":"EventDefinition","parameters":{"id":1559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1556,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:9","nodeType":"VariableDeclaration","scope":1560,"src":"5692:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1555,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1558,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:9","nodeType":"VariableDeclaration","scope":1560,"src":"5714:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1557,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:9"},"src":"5663:64:9"},{"anonymous":false,"documentation":{"id":1561,"nodeType":"StructuredDocumentation","src":"5733:158:9","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":1567,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:9","nodeType":"EventDefinition","parameters":{"id":1566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1563,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:9","nodeType":"VariableDeclaration","scope":1567,"src":"5927:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1562,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1565,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:9","nodeType":"VariableDeclaration","scope":1567,"src":"5949:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1564,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:9"},"src":"5896:80:9"},{"anonymous":false,"documentation":{"id":1568,"nodeType":"StructuredDocumentation","src":"5982:170:9","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":1574,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:9","nodeType":"EventDefinition","parameters":{"id":1573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1570,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:9","nodeType":"VariableDeclaration","scope":1574,"src":"6192:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1569,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1572,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:9","nodeType":"VariableDeclaration","scope":1574,"src":"6214:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1571,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:9"},"src":"6157:76:9"},{"anonymous":false,"documentation":{"id":1575,"nodeType":"StructuredDocumentation","src":"6239:353:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":1581,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:9","nodeType":"EventDefinition","parameters":{"id":1580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1577,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:9","nodeType":"VariableDeclaration","scope":1581,"src":"6637:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1576,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1579,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:9","nodeType":"VariableDeclaration","scope":1581,"src":"6659:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1578,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:9"},"src":"6597:98:9"},{"anonymous":false,"documentation":{"id":1582,"nodeType":"StructuredDocumentation","src":"6701:357:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":1588,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:9","nodeType":"EventDefinition","parameters":{"id":1587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:9","nodeType":"VariableDeclaration","scope":1588,"src":"7104:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1583,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1586,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:9","nodeType":"VariableDeclaration","scope":1588,"src":"7126:35:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1585,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:9"},"src":"7063:100:9"},{"anonymous":false,"documentation":{"id":1589,"nodeType":"StructuredDocumentation","src":"7169:132:9","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":1594,"name":"AuthorizerChanged","nameLocation":"7312:17:9","nodeType":"EventDefinition","parameters":{"id":1593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1592,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:9","nodeType":"VariableDeclaration","scope":1594,"src":"7330:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"},"typeName":{"id":1591,"nodeType":"UserDefinedTypeName","pathNode":{"id":1590,"name":"IAuthorizer","nameLocations":["7330:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"7330:11:9"},"referencedDeclaration":218,"src":"7330:11:9","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:9"},"src":"7306:59:9"},{"anonymous":false,"documentation":{"id":1595,"nodeType":"StructuredDocumentation","src":"7371:180:9","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":1600,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:9","nodeType":"EventDefinition","parameters":{"id":1599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1598,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:9","nodeType":"VariableDeclaration","scope":1600,"src":"7591:55:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"},"typeName":{"id":1597,"nodeType":"UserDefinedTypeName","pathNode":{"id":1596,"name":"IProtocolFeeController","nameLocations":["7591:22:9"],"nodeType":"IdentifierPath","referencedDeclaration":725,"src":"7591:22:9"},"referencedDeclaration":725,"src":"7591:22:9","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:9"},"src":"7556:92:9"},{"anonymous":false,"documentation":{"id":1601,"nodeType":"StructuredDocumentation","src":"7654:553:9","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":1612,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:9","nodeType":"EventDefinition","parameters":{"id":1611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:9","nodeType":"VariableDeclaration","scope":1612,"src":"8250:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1603,"nodeType":"UserDefinedTypeName","pathNode":{"id":1602,"name":"IERC4626","nameLocations":["8250:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"8250:8:9"},"referencedDeclaration":3212,"src":"8250:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1606,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:9","nodeType":"VariableDeclaration","scope":1612,"src":"8289:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1605,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1608,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:9","nodeType":"VariableDeclaration","scope":1612,"src":"8323:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1607,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1610,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:9","nodeType":"VariableDeclaration","scope":1612,"src":"8354:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1609,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:9"},"src":"8212:171:9"},{"anonymous":false,"documentation":{"id":1613,"nodeType":"StructuredDocumentation","src":"8389:570:9","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":1622,"name":"BufferSharesMinted","nameLocation":"8970:18:9","nodeType":"EventDefinition","parameters":{"id":1621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1616,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:9","nodeType":"VariableDeclaration","scope":1622,"src":"8989:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1615,"nodeType":"UserDefinedTypeName","pathNode":{"id":1614,"name":"IERC4626","nameLocations":["8989:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"8989:8:9"},"referencedDeclaration":3212,"src":"8989:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1618,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:9","nodeType":"VariableDeclaration","scope":1622,"src":"9020:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1617,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1620,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:9","nodeType":"VariableDeclaration","scope":1622,"src":"9040:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1619,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:9"},"src":"8964:98:9"},{"anonymous":false,"documentation":{"id":1623,"nodeType":"StructuredDocumentation","src":"9068:571:9","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":1632,"name":"BufferSharesBurned","nameLocation":"9650:18:9","nodeType":"EventDefinition","parameters":{"id":1631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1626,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:9","nodeType":"VariableDeclaration","scope":1632,"src":"9669:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1625,"nodeType":"UserDefinedTypeName","pathNode":{"id":1624,"name":"IERC4626","nameLocations":["9669:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"9669:8:9"},"referencedDeclaration":3212,"src":"9669:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1628,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:9","nodeType":"VariableDeclaration","scope":1632,"src":"9700:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1627,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1630,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:9","nodeType":"VariableDeclaration","scope":1632,"src":"9722:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1629,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:9"},"src":"9644:100:9"},{"anonymous":false,"documentation":{"id":1633,"nodeType":"StructuredDocumentation","src":"9750:509:9","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":1644,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:9","nodeType":"EventDefinition","parameters":{"id":1643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1636,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:9","nodeType":"VariableDeclaration","scope":1644,"src":"10306:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1635,"nodeType":"UserDefinedTypeName","pathNode":{"id":1634,"name":"IERC4626","nameLocations":["10306:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"10306:8:9"},"referencedDeclaration":3212,"src":"10306:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1638,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:9","nodeType":"VariableDeclaration","scope":1644,"src":"10345:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1637,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1640,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:9","nodeType":"VariableDeclaration","scope":1644,"src":"10379:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1639,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1642,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:9","nodeType":"VariableDeclaration","scope":1644,"src":"10410:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1641,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:9"},"src":"10264:175:9"},{"anonymous":false,"documentation":{"id":1645,"nodeType":"StructuredDocumentation","src":"10445:278:9","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":1649,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:9","nodeType":"EventDefinition","parameters":{"id":1648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1647,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:9","nodeType":"VariableDeclaration","scope":1649,"src":"10765:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1646,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:9"},"src":"10728:50:9"},{"anonymous":false,"documentation":{"id":1650,"nodeType":"StructuredDocumentation","src":"10784:194:9","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":1658,"name":"VaultAuxiliary","nameLocation":"10989:14:9","nodeType":"EventDefinition","parameters":{"id":1657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1652,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:9","nodeType":"VariableDeclaration","scope":1658,"src":"11004:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1651,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1654,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:9","nodeType":"VariableDeclaration","scope":1658,"src":"11026:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1653,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1656,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:9","nodeType":"VariableDeclaration","scope":1658,"src":"11052:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1655,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:9"},"src":"10983:86:9"}],"scope":1660,"src":"500:10571:9","usedErrors":[],"usedEvents":[1458,1463,1482,1494,1506,1524,1542,1547,1550,1553,1560,1567,1574,1581,1588,1594,1600,1612,1622,1632,1644,1649,1658]}],"src":"46:11026:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AddLiquidityParams":[2475],"AfterSwapParams":[2453],"BufferWrapOrUnwrapParams":[2514],"FEE_BITLENGTH":[2517],"FEE_SCALING_FACTOR":[2520],"HookFlags":[2279],"HooksConfig":[2303],"IAuthorizer":[218],"IERC20":[3290],"IERC4626":[3212],"IHooks":[420],"IProtocolFeeController":[725],"IRateProvider":[24],"IVault":[763],"IVaultExtension":[2078],"LiquidityManagement":[2232],"MAX_FEE_PERCENTAGE":[2523],"PoolConfig":[2257],"PoolConfigBits":[2234],"PoolData":[2381],"PoolRoleAccounts":[2329],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"RemoveLiquidityParams":[2496],"Rounding":[2384],"SwapKind":[2387],"SwapState":[2313],"TokenConfig":[2346],"TokenInfo":[2356],"TokenType":[2333],"VaultState":[2321],"VaultSwapParams":[2406],"WrappingDirection":[2499]},"id":2079,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1661,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1663,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":3213,"src":"72:75:10","symbolAliases":[{"foreign":{"id":1662,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"81:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1665,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":3291,"src":"148:72:10","symbolAliases":[{"foreign":{"id":1664,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"157:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1667,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":219,"src":"222:48:10","symbolAliases":[{"foreign":{"id":1666,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"231:11:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1669,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":726,"src":"271:70:10","symbolAliases":[{"foreign":{"id":1668,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":725,"src":"280:22:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1671,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":764,"src":"342:38:10","symbolAliases":[{"foreign":{"id":1670,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"351:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1673,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":421,"src":"381:38:10","symbolAliases":[{"foreign":{"id":1672,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"390:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1674,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":2524,"src":"420:26:10","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":1675,"nodeType":"StructuredDocumentation","src":"448:318:10","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":2078,"linearizedBaseContracts":[2078],"name":"IVaultExtension","nameLocation":"777:15:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1676,"nodeType":"StructuredDocumentation","src":"1025:206:10","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":1682,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:10","nodeType":"FunctionDefinition","parameters":{"id":1677,"nodeType":"ParameterList","parameters":[],"src":"1250:2:10"},"returnParameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1682,"src":"1276:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":1679,"nodeType":"UserDefinedTypeName","pathNode":{"id":1678,"name":"IVault","nameLocations":["1276:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"1276:6:10"},"referencedDeclaration":763,"src":"1276:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:10"},"scope":2078,"src":"1236:48:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1683,"nodeType":"StructuredDocumentation","src":"1290:202:10","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":1688,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:10","nodeType":"FunctionDefinition","parameters":{"id":1684,"nodeType":"ParameterList","parameters":[],"src":"1519:2:10"},"returnParameters":{"id":1687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1686,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:10","nodeType":"VariableDeclaration","scope":1688,"src":"1545:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1685,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:10"},"scope":2078,"src":"1497:68:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1689,"nodeType":"StructuredDocumentation","src":"1793:254:10","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":1694,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:10","nodeType":"FunctionDefinition","parameters":{"id":1690,"nodeType":"ParameterList","parameters":[],"src":"2071:2:10"},"returnParameters":{"id":1693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1692,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:10","nodeType":"VariableDeclaration","scope":1694,"src":"2097:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1691,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:10"},"scope":2078,"src":"2052:60:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1695,"nodeType":"StructuredDocumentation","src":"2118:141:10","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":1700,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:10","nodeType":"FunctionDefinition","parameters":{"id":1696,"nodeType":"ParameterList","parameters":[],"src":"2293:2:10"},"returnParameters":{"id":1699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1698,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:10","nodeType":"VariableDeclaration","scope":1700,"src":"2319:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1697,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:10"},"scope":2078,"src":"2264:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1701,"nodeType":"StructuredDocumentation","src":"2352:284:10","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":1709,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:10","nodeType":"FunctionDefinition","parameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"token","nameLocation":"2671:5:10","nodeType":"VariableDeclaration","scope":1709,"src":"2664:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1703,"nodeType":"UserDefinedTypeName","pathNode":{"id":1702,"name":"IERC20","nameLocations":["2664:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2664:6:10"},"referencedDeclaration":3290,"src":"2664:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:10"},"returnParameters":{"id":1708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1707,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:10","nodeType":"VariableDeclaration","scope":1709,"src":"2701:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1706,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:10"},"scope":2078,"src":"2641:79:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1710,"nodeType":"StructuredDocumentation","src":"2726:230:10","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":1718,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:10","nodeType":"FunctionDefinition","parameters":{"id":1714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1713,"mutability":"mutable","name":"token","nameLocation":"2991:5:10","nodeType":"VariableDeclaration","scope":1718,"src":"2984:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1712,"nodeType":"UserDefinedTypeName","pathNode":{"id":1711,"name":"IERC20","nameLocations":["2984:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2984:6:10"},"referencedDeclaration":3290,"src":"2984:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:10"},"returnParameters":{"id":1717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1716,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:10","nodeType":"VariableDeclaration","scope":1718,"src":"3021:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1715,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:10"},"scope":2078,"src":"2961:83:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1719,"nodeType":"StructuredDocumentation","src":"3050:944:10","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":1726,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:10","nodeType":"FunctionDefinition","parameters":{"id":1722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1721,"mutability":"mutable","name":"pool","nameLocation":"4042:4:10","nodeType":"VariableDeclaration","scope":1726,"src":"4034:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1720,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:10"},"returnParameters":{"id":1725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1724,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:10","nodeType":"VariableDeclaration","scope":1726,"src":"4071:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1723,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:10"},"scope":2078,"src":"3999:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1727,"nodeType":"StructuredDocumentation","src":"4323:1604:10","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":1750,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:10","nodeType":"FunctionDefinition","parameters":{"id":1748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1729,"mutability":"mutable","name":"pool","nameLocation":"5971:4:10","nodeType":"VariableDeclaration","scope":1750,"src":"5963:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1728,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1733,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:10","nodeType":"VariableDeclaration","scope":1750,"src":"5985:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1731,"nodeType":"UserDefinedTypeName","pathNode":{"id":1730,"name":"TokenConfig","nameLocations":["5985:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2346,"src":"5985:11:10"},"referencedDeclaration":2346,"src":"5985:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2346_storage_ptr","typeString":"struct TokenConfig"}},"id":1732,"nodeType":"ArrayTypeName","src":"5985:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1735,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:10","nodeType":"VariableDeclaration","scope":1750,"src":"6027:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1734,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1737,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:10","nodeType":"VariableDeclaration","scope":1750,"src":"6062:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1736,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1739,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:10","nodeType":"VariableDeclaration","scope":1750,"src":"6097:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1738,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1742,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:10","nodeType":"VariableDeclaration","scope":1750,"src":"6129:38:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1741,"nodeType":"UserDefinedTypeName","pathNode":{"id":1740,"name":"PoolRoleAccounts","nameLocations":["6129:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2329,"src":"6129:16:10"},"referencedDeclaration":2329,"src":"6129:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1744,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:10","nodeType":"VariableDeclaration","scope":1750,"src":"6177:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1743,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1747,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:10","nodeType":"VariableDeclaration","scope":1750,"src":"6212:48:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1746,"nodeType":"UserDefinedTypeName","pathNode":{"id":1745,"name":"LiquidityManagement","nameLocations":["6212:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"6212:19:10"},"referencedDeclaration":2232,"src":"6212:19:10","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:10"},"returnParameters":{"id":1749,"nodeType":"ParameterList","parameters":[],"src":"6275:0:10"},"scope":2078,"src":"5932:344:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1751,"nodeType":"StructuredDocumentation","src":"6282:185:10","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":1758,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:10","nodeType":"FunctionDefinition","parameters":{"id":1754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1753,"mutability":"mutable","name":"pool","nameLocation":"6506:4:10","nodeType":"VariableDeclaration","scope":1758,"src":"6498:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1752,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:10"},"returnParameters":{"id":1757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1756,"mutability":"mutable","name":"registered","nameLocation":"6540:10:10","nodeType":"VariableDeclaration","scope":1758,"src":"6535:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1755,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:10"},"scope":2078,"src":"6472:80:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1759,"nodeType":"StructuredDocumentation","src":"6558:589:10","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":1779,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:10","nodeType":"FunctionDefinition","parameters":{"id":1775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1761,"mutability":"mutable","name":"pool","nameLocation":"7189:4:10","nodeType":"VariableDeclaration","scope":1779,"src":"7181:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1760,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1763,"mutability":"mutable","name":"to","nameLocation":"7211:2:10","nodeType":"VariableDeclaration","scope":1779,"src":"7203:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1762,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1767,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:10","nodeType":"VariableDeclaration","scope":1779,"src":"7223:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1765,"nodeType":"UserDefinedTypeName","pathNode":{"id":1764,"name":"IERC20","nameLocations":["7223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"7223:6:10"},"referencedDeclaration":3290,"src":"7223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":1766,"nodeType":"ArrayTypeName","src":"7223:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1770,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:10","nodeType":"VariableDeclaration","scope":1779,"src":"7255:31:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1768,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1769,"nodeType":"ArrayTypeName","src":"7255:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1772,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:10","nodeType":"VariableDeclaration","scope":1779,"src":"7296:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1771,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1774,"mutability":"mutable","name":"userData","nameLocation":"7342:8:10","nodeType":"VariableDeclaration","scope":1779,"src":"7329:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1773,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:10"},"returnParameters":{"id":1778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1777,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:10","nodeType":"VariableDeclaration","scope":1779,"src":"7375:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:10"},"scope":2078,"src":"7152:245:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1780,"nodeType":"StructuredDocumentation","src":"7627:258:10","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":1787,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:10","nodeType":"FunctionDefinition","parameters":{"id":1783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"pool","nameLocation":"7925:4:10","nodeType":"VariableDeclaration","scope":1787,"src":"7917:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1781,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:10"},"returnParameters":{"id":1786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:10","nodeType":"VariableDeclaration","scope":1787,"src":"7954:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1784,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:10"},"scope":2078,"src":"7890:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1788,"nodeType":"StructuredDocumentation","src":"7978:152:10","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":1797,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:10","nodeType":"FunctionDefinition","parameters":{"id":1791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1790,"mutability":"mutable","name":"pool","nameLocation":"8166:4:10","nodeType":"VariableDeclaration","scope":1797,"src":"8158:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1789,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:10"},"returnParameters":{"id":1796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1795,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:10","nodeType":"VariableDeclaration","scope":1797,"src":"8195:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1793,"nodeType":"UserDefinedTypeName","pathNode":{"id":1792,"name":"IERC20","nameLocations":["8195:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"8195:6:10"},"referencedDeclaration":3290,"src":"8195:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":1794,"nodeType":"ArrayTypeName","src":"8195:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:10"},"scope":2078,"src":"8135:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1798,"nodeType":"StructuredDocumentation","src":"8225:512:10","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":1809,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:10","nodeType":"FunctionDefinition","parameters":{"id":1801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1800,"mutability":"mutable","name":"pool","nameLocation":"8786:4:10","nodeType":"VariableDeclaration","scope":1809,"src":"8778:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1799,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:10"},"returnParameters":{"id":1808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1804,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:10","nodeType":"VariableDeclaration","scope":1809,"src":"8820:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1802,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1803,"nodeType":"ArrayTypeName","src":"8820:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1807,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:10","nodeType":"VariableDeclaration","scope":1809,"src":"8860:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1805,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1806,"nodeType":"ArrayTypeName","src":"8860:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:10"},"scope":2078,"src":"8742:147:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1810,"nodeType":"StructuredDocumentation","src":"8895:287:10","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":1818,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:10","nodeType":"FunctionDefinition","parameters":{"id":1813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1812,"mutability":"mutable","name":"pool","nameLocation":"9216:4:10","nodeType":"VariableDeclaration","scope":1818,"src":"9208:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1811,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:10"},"returnParameters":{"id":1817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1816,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:10","nodeType":"VariableDeclaration","scope":1818,"src":"9245:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2381_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1815,"nodeType":"UserDefinedTypeName","pathNode":{"id":1814,"name":"PoolData","nameLocations":["9245:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":2381,"src":"9245:8:10"},"referencedDeclaration":2381,"src":"9245:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2381_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:10"},"scope":2078,"src":"9187:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1819,"nodeType":"StructuredDocumentation","src":"9277:531:10","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":1838,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:10","nodeType":"FunctionDefinition","parameters":{"id":1822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1821,"mutability":"mutable","name":"pool","nameLocation":"9856:4:10","nodeType":"VariableDeclaration","scope":1838,"src":"9848:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1820,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:10"},"returnParameters":{"id":1837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1826,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:10","nodeType":"VariableDeclaration","scope":1838,"src":"9927:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1824,"nodeType":"UserDefinedTypeName","pathNode":{"id":1823,"name":"IERC20","nameLocations":["9927:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"9927:6:10"},"referencedDeclaration":3290,"src":"9927:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":1825,"nodeType":"ArrayTypeName","src":"9927:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1830,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:10","nodeType":"VariableDeclaration","scope":1838,"src":"9963:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2356_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":1828,"nodeType":"UserDefinedTypeName","pathNode":{"id":1827,"name":"TokenInfo","nameLocations":["9963:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"9963:9:10"},"referencedDeclaration":2356,"src":"9963:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2356_storage_ptr","typeString":"struct TokenInfo"}},"id":1829,"nodeType":"ArrayTypeName","src":"9963:11:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2356_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":1833,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:10","nodeType":"VariableDeclaration","scope":1838,"src":"10005:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1831,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1832,"nodeType":"ArrayTypeName","src":"10005:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1836,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:10","nodeType":"VariableDeclaration","scope":1838,"src":"10047:41:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1834,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1835,"nodeType":"ArrayTypeName","src":"10047:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:10"},"scope":2078,"src":"9813:286:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1839,"nodeType":"StructuredDocumentation","src":"10105:312:10","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":1847,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:10","nodeType":"FunctionDefinition","parameters":{"id":1842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1841,"mutability":"mutable","name":"pool","nameLocation":"10462:4:10","nodeType":"VariableDeclaration","scope":1847,"src":"10454:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1840,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:10"},"returnParameters":{"id":1846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1845,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:10","nodeType":"VariableDeclaration","scope":1847,"src":"10491:37:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1843,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1844,"nodeType":"ArrayTypeName","src":"10491:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:10"},"scope":2078,"src":"10422:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1848,"nodeType":"StructuredDocumentation","src":"10536:301:10","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":1856,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:10","nodeType":"FunctionDefinition","parameters":{"id":1851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1850,"mutability":"mutable","name":"pool","nameLocation":"10873:4:10","nodeType":"VariableDeclaration","scope":1856,"src":"10865:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1849,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:10"},"returnParameters":{"id":1855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1854,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:10","nodeType":"VariableDeclaration","scope":1856,"src":"10902:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2257_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":1853,"nodeType":"UserDefinedTypeName","pathNode":{"id":1852,"name":"PoolConfig","nameLocations":["10902:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":2257,"src":"10902:10:10"},"referencedDeclaration":2257,"src":"10902:10:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2257_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:10"},"scope":2078,"src":"10842:90:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1857,"nodeType":"StructuredDocumentation","src":"10938:283:10","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:10","nodeType":"FunctionDefinition","parameters":{"id":1860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1859,"mutability":"mutable","name":"pool","nameLocation":"11258:4:10","nodeType":"VariableDeclaration","scope":1865,"src":"11250:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1858,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:10"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1863,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:10","nodeType":"VariableDeclaration","scope":1865,"src":"11287:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2303_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1862,"nodeType":"UserDefinedTypeName","pathNode":{"id":1861,"name":"HooksConfig","nameLocations":["11287:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2303,"src":"11287:11:10"},"referencedDeclaration":2303,"src":"11287:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2303_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:10"},"scope":2078,"src":"11226:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1866,"nodeType":"StructuredDocumentation","src":"11325:160:10","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":1873,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:10","nodeType":"FunctionDefinition","parameters":{"id":1869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1868,"mutability":"mutable","name":"pool","nameLocation":"11518:4:10","nodeType":"VariableDeclaration","scope":1873,"src":"11510:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:10"},"returnParameters":{"id":1872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1871,"mutability":"mutable","name":"rate","nameLocation":"11555:4:10","nodeType":"VariableDeclaration","scope":1873,"src":"11547:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1870,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:10"},"scope":2078,"src":"11490:71:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1874,"nodeType":"StructuredDocumentation","src":"11792:168:10","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":1881,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:10","nodeType":"FunctionDefinition","parameters":{"id":1877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1876,"mutability":"mutable","name":"token","nameLocation":"11994:5:10","nodeType":"VariableDeclaration","scope":1881,"src":"11986:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1875,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:10"},"returnParameters":{"id":1880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1879,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:10","nodeType":"VariableDeclaration","scope":1881,"src":"12024:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1878,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:10"},"scope":2078,"src":"11965:85:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1882,"nodeType":"StructuredDocumentation","src":"12056:225:10","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":1891,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:10","nodeType":"FunctionDefinition","parameters":{"id":1887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1884,"mutability":"mutable","name":"token","nameLocation":"12313:5:10","nodeType":"VariableDeclaration","scope":1891,"src":"12305:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1883,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1886,"mutability":"mutable","name":"account","nameLocation":"12328:7:10","nodeType":"VariableDeclaration","scope":1891,"src":"12320:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1885,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:10"},"returnParameters":{"id":1890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1889,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:10","nodeType":"VariableDeclaration","scope":1891,"src":"12360:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1888,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:10"},"scope":2078,"src":"12286:96:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1892,"nodeType":"StructuredDocumentation","src":"12388:299:10","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":1903,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:10","nodeType":"FunctionDefinition","parameters":{"id":1899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1894,"mutability":"mutable","name":"token","nameLocation":"12719:5:10","nodeType":"VariableDeclaration","scope":1903,"src":"12711:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1893,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1896,"mutability":"mutable","name":"owner","nameLocation":"12734:5:10","nodeType":"VariableDeclaration","scope":1903,"src":"12726:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1895,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1898,"mutability":"mutable","name":"spender","nameLocation":"12749:7:10","nodeType":"VariableDeclaration","scope":1903,"src":"12741:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1897,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:10"},"returnParameters":{"id":1902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1901,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:10","nodeType":"VariableDeclaration","scope":1903,"src":"12781:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1900,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:10"},"scope":2078,"src":"12692:113:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1904,"nodeType":"StructuredDocumentation","src":"12811:475:10","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":1915,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:10","nodeType":"FunctionDefinition","parameters":{"id":1911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1906,"mutability":"mutable","name":"owner","nameLocation":"13316:5:10","nodeType":"VariableDeclaration","scope":1915,"src":"13308:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1905,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1908,"mutability":"mutable","name":"spender","nameLocation":"13331:7:10","nodeType":"VariableDeclaration","scope":1915,"src":"13323:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1910,"mutability":"mutable","name":"amount","nameLocation":"13348:6:10","nodeType":"VariableDeclaration","scope":1915,"src":"13340:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1909,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:10"},"returnParameters":{"id":1914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1913,"mutability":"mutable","name":"success","nameLocation":"13379:7:10","nodeType":"VariableDeclaration","scope":1915,"src":"13374:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1912,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:10"},"scope":2078,"src":"13291:97:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1916,"nodeType":"StructuredDocumentation","src":"13615:251:10","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":1923,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:10","nodeType":"FunctionDefinition","parameters":{"id":1919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1918,"mutability":"mutable","name":"pool","nameLocation":"13901:4:10","nodeType":"VariableDeclaration","scope":1923,"src":"13893:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1917,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:10"},"returnParameters":{"id":1922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1921,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:10","nodeType":"VariableDeclaration","scope":1923,"src":"13930:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1920,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:10"},"scope":2078,"src":"13871:76:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1924,"nodeType":"StructuredDocumentation","src":"13953:648:10","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":1937,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:10","nodeType":"FunctionDefinition","parameters":{"id":1927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1926,"mutability":"mutable","name":"pool","nameLocation":"14651:4:10","nodeType":"VariableDeclaration","scope":1937,"src":"14643:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1925,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:10"},"returnParameters":{"id":1936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1929,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:10","nodeType":"VariableDeclaration","scope":1937,"src":"14709:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1928,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1931,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:10","nodeType":"VariableDeclaration","scope":1937,"src":"14726:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1930,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1933,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:10","nodeType":"VariableDeclaration","scope":1937,"src":"14757:30:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1932,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1935,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:10","nodeType":"VariableDeclaration","scope":1937,"src":"14789:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1934,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:10"},"scope":2078,"src":"14606:205:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1938,"nodeType":"StructuredDocumentation","src":"15039:332:10","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":1946,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:10","nodeType":"FunctionDefinition","parameters":{"id":1942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1941,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:10","nodeType":"VariableDeclaration","scope":1946,"src":"15412:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1940,"nodeType":"UserDefinedTypeName","pathNode":{"id":1939,"name":"IERC4626","nameLocations":["15412:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"15412:8:10"},"referencedDeclaration":3212,"src":"15412:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:10"},"returnParameters":{"id":1945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1944,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:10","nodeType":"VariableDeclaration","scope":1946,"src":"15458:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1943,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:10"},"scope":2078,"src":"15376:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1947,"nodeType":"StructuredDocumentation","src":"15490:477:10","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":1955,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:10","nodeType":"FunctionDefinition","parameters":{"id":1951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1950,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:10","nodeType":"VariableDeclaration","scope":1955,"src":"16003:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1949,"nodeType":"UserDefinedTypeName","pathNode":{"id":1948,"name":"IERC4626","nameLocations":["16003:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"16003:8:10"},"referencedDeclaration":3212,"src":"16003:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:10"},"returnParameters":{"id":1954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1953,"mutability":"mutable","name":"asset","nameLocation":"16057:5:10","nodeType":"VariableDeclaration","scope":1955,"src":"16049:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1952,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:10"},"scope":2078,"src":"15972:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1956,"nodeType":"StructuredDocumentation","src":"16288:379:10","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":1966,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:10","nodeType":"FunctionDefinition","parameters":{"id":1962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1958,"mutability":"mutable","name":"pool","nameLocation":"16715:4:10","nodeType":"VariableDeclaration","scope":1966,"src":"16707:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1957,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1961,"mutability":"mutable","name":"token","nameLocation":"16728:5:10","nodeType":"VariableDeclaration","scope":1966,"src":"16721:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1960,"nodeType":"UserDefinedTypeName","pathNode":{"id":1959,"name":"IERC20","nameLocations":["16721:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"16721:6:10"},"referencedDeclaration":3290,"src":"16721:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:10"},"returnParameters":{"id":1965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1964,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:10","nodeType":"VariableDeclaration","scope":1966,"src":"16758:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1963,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:10"},"scope":2078,"src":"16672:109:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1967,"nodeType":"StructuredDocumentation","src":"16787:381:10","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":1977,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:10","nodeType":"FunctionDefinition","parameters":{"id":1973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1969,"mutability":"mutable","name":"pool","nameLocation":"17217:4:10","nodeType":"VariableDeclaration","scope":1977,"src":"17209:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1968,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1972,"mutability":"mutable","name":"token","nameLocation":"17230:5:10","nodeType":"VariableDeclaration","scope":1977,"src":"17223:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1971,"nodeType":"UserDefinedTypeName","pathNode":{"id":1970,"name":"IERC20","nameLocations":["17223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"17223:6:10"},"referencedDeclaration":3290,"src":"17223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:10"},"returnParameters":{"id":1976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1975,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:10","nodeType":"VariableDeclaration","scope":1977,"src":"17260:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1974,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:10"},"scope":2078,"src":"17173:111:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1978,"nodeType":"StructuredDocumentation","src":"17290:271:10","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":1985,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:10","nodeType":"FunctionDefinition","parameters":{"id":1981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1980,"mutability":"mutable","name":"pool","nameLocation":"17610:4:10","nodeType":"VariableDeclaration","scope":1985,"src":"17602:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1979,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:10"},"returnParameters":{"id":1984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1983,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:10","nodeType":"VariableDeclaration","scope":1985,"src":"17639:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1982,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:10"},"scope":2078,"src":"17566:100:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1986,"nodeType":"StructuredDocumentation","src":"17672:286:10","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":1994,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:10","nodeType":"FunctionDefinition","parameters":{"id":1989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1988,"mutability":"mutable","name":"pool","nameLocation":"18000:4:10","nodeType":"VariableDeclaration","scope":1994,"src":"17992:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1987,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:10"},"returnParameters":{"id":1993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1992,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:10","nodeType":"VariableDeclaration","scope":1994,"src":"18029:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1991,"nodeType":"UserDefinedTypeName","pathNode":{"id":1990,"name":"PoolRoleAccounts","nameLocations":["18029:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2329,"src":"18029:16:10"},"referencedDeclaration":2329,"src":"18029:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:10"},"scope":2078,"src":"17963:104:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1995,"nodeType":"StructuredDocumentation","src":"18073:363:10","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":2005,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:10","nodeType":"FunctionDefinition","parameters":{"id":2001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1997,"mutability":"mutable","name":"pool","nameLocation":"18499:4:10","nodeType":"VariableDeclaration","scope":2005,"src":"18491:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1996,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2000,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:10","nodeType":"VariableDeclaration","scope":2005,"src":"18513:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1999,"nodeType":"UserDefinedTypeName","pathNode":{"id":1998,"name":"PoolSwapParams","nameLocations":["18513:14:10"],"nodeType":"IdentifierPath","referencedDeclaration":2424,"src":"18513:14:10"},"referencedDeclaration":2424,"src":"18513:14:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:10"},"returnParameters":{"id":2004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2003,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:10","nodeType":"VariableDeclaration","scope":2005,"src":"18575:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2002,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:10"},"scope":2078,"src":"18441:168:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2006,"nodeType":"StructuredDocumentation","src":"18615:145:10","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":2012,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:10","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[],"src":"18798:2:10"},"returnParameters":{"id":2011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2010,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:10","nodeType":"VariableDeclaration","scope":2012,"src":"18824:44:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"},"typeName":{"id":2009,"nodeType":"UserDefinedTypeName","pathNode":{"id":2008,"name":"IProtocolFeeController","nameLocations":["18824:22:10"],"nodeType":"IdentifierPath","referencedDeclaration":725,"src":"18824:22:10"},"referencedDeclaration":725,"src":"18824:22:10","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:10"},"scope":2078,"src":"18765:105:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2013,"nodeType":"StructuredDocumentation","src":"19098:296:10","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":2020,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:10","nodeType":"FunctionDefinition","parameters":{"id":2016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2015,"mutability":"mutable","name":"pool","nameLocation":"19437:4:10","nodeType":"VariableDeclaration","scope":2020,"src":"19429:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2014,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:10"},"returnParameters":{"id":2019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2018,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:10","nodeType":"VariableDeclaration","scope":2020,"src":"19466:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2017,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:10"},"scope":2078,"src":"19399:88:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2021,"nodeType":"StructuredDocumentation","src":"19493:679:10","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":2036,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:10","nodeType":"FunctionDefinition","parameters":{"id":2031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2023,"mutability":"mutable","name":"pool","nameLocation":"20227:4:10","nodeType":"VariableDeclaration","scope":2036,"src":"20219:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2022,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2025,"mutability":"mutable","name":"from","nameLocation":"20249:4:10","nodeType":"VariableDeclaration","scope":2036,"src":"20241:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2024,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2027,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:10","nodeType":"VariableDeclaration","scope":2036,"src":"20263:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2026,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2030,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:10","nodeType":"VariableDeclaration","scope":2036,"src":"20297:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2028,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2029,"nodeType":"ArrayTypeName","src":"20297:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:10"},"returnParameters":{"id":2035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2034,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:10","nodeType":"VariableDeclaration","scope":2036,"src":"20352:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2032,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2033,"nodeType":"ArrayTypeName","src":"20352:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:10"},"scope":2078,"src":"20177:204:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2037,"nodeType":"StructuredDocumentation","src":"20602:699:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":2044,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:10","nodeType":"FunctionDefinition","parameters":{"id":2040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2039,"mutability":"mutable","name":"data","nameLocation":"21336:4:10","nodeType":"VariableDeclaration","scope":2044,"src":"21321:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2038,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:10"},"returnParameters":{"id":2043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2042,"mutability":"mutable","name":"result","nameLocation":"21373:6:10","nodeType":"VariableDeclaration","scope":2044,"src":"21360:19:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2041,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:10"},"scope":2078,"src":"21306:75:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2045,"nodeType":"StructuredDocumentation","src":"21387:731:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":2050,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:10","nodeType":"FunctionDefinition","parameters":{"id":2048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2047,"mutability":"mutable","name":"data","nameLocation":"22162:4:10","nodeType":"VariableDeclaration","scope":2050,"src":"22147:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2046,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:10"},"returnParameters":{"id":2049,"nodeType":"ParameterList","parameters":[],"src":"22176:0:10"},"scope":2078,"src":"22123:54:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2051,"nodeType":"StructuredDocumentation","src":"22183:239:10","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":2056,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:10","nodeType":"FunctionDefinition","parameters":{"id":2052,"nodeType":"ParameterList","parameters":[],"src":"22451:2:10"},"returnParameters":{"id":2055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2054,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:10","nodeType":"VariableDeclaration","scope":2056,"src":"22477:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2053,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:10"},"scope":2078,"src":"22427:70:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2057,"nodeType":"StructuredDocumentation","src":"22503:302:10","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":2062,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:10","nodeType":"FunctionDefinition","parameters":{"id":2058,"nodeType":"ParameterList","parameters":[],"src":"22845:2:10"},"returnParameters":{"id":2061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2060,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:10","nodeType":"VariableDeclaration","scope":2062,"src":"22871:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2059,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:10"},"scope":2078,"src":"22810:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2063,"nodeType":"StructuredDocumentation","src":"22908:162:10","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":2070,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:10","nodeType":"FunctionDefinition","parameters":{"id":2068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2065,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:10","nodeType":"VariableDeclaration","scope":2070,"src":"23103:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2064,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2067,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:10","nodeType":"VariableDeclaration","scope":2070,"src":"23121:24:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2066,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:10"},"returnParameters":{"id":2069,"nodeType":"ParameterList","parameters":[],"src":"23155:0:10"},"scope":2078,"src":"23075:81:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2071,"nodeType":"StructuredDocumentation","src":"23380:284:10","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":2077,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:10","nodeType":"FunctionDefinition","parameters":{"id":2072,"nodeType":"ParameterList","parameters":[],"src":"23691:2:10"},"returnParameters":{"id":2076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2075,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:10","nodeType":"VariableDeclaration","scope":2077,"src":"23717:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"},"typeName":{"id":2074,"nodeType":"UserDefinedTypeName","pathNode":{"id":2073,"name":"IAuthorizer","nameLocations":["23717:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"23717:11:10"},"referencedDeclaration":218,"src":"23717:11:10","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:10"},"scope":2078,"src":"23669:72:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2079,"src":"767:22976:10","usedErrors":[],"usedEvents":[]}],"src":"46:23698:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AddLiquidityParams":[2475],"AfterSwapParams":[2453],"BufferWrapOrUnwrapParams":[2514],"FEE_BITLENGTH":[2517],"FEE_SCALING_FACTOR":[2520],"HookFlags":[2279],"HooksConfig":[2303],"IERC20":[3290],"IERC4626":[3212],"IRateProvider":[24],"IVaultMain":[2214],"LiquidityManagement":[2232],"MAX_FEE_PERCENTAGE":[2523],"PoolConfig":[2257],"PoolConfigBits":[2234],"PoolData":[2381],"PoolRoleAccounts":[2329],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"RemoveLiquidityParams":[2496],"Rounding":[2384],"SwapKind":[2387],"SwapState":[2313],"TokenConfig":[2346],"TokenInfo":[2356],"TokenType":[2333],"VaultState":[2321],"VaultSwapParams":[2406],"WrappingDirection":[2499]},"id":2215,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2080,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2082,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2215,"sourceUnit":3291,"src":"72:72:11","symbolAliases":[{"foreign":{"id":2081,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2083,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2215,"sourceUnit":2524,"src":"146:26:11","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":2084,"nodeType":"StructuredDocumentation","src":"174:232:11","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":2214,"linearizedBaseContracts":[2214],"name":"IVaultMain","nameLocation":"417:10:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2085,"nodeType":"StructuredDocumentation","src":"656:431:11","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":2092,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:11","nodeType":"FunctionDefinition","parameters":{"id":2088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2087,"mutability":"mutable","name":"data","nameLocation":"1123:4:11","nodeType":"VariableDeclaration","scope":2092,"src":"1108:19:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2086,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:11"},"returnParameters":{"id":2091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2090,"mutability":"mutable","name":"result","nameLocation":"1160:6:11","nodeType":"VariableDeclaration","scope":2092,"src":"1147:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2089,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:11"},"scope":2214,"src":"1092:76:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2093,"nodeType":"StructuredDocumentation","src":"1174:1291:11","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":2103,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:11","nodeType":"FunctionDefinition","parameters":{"id":2099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2096,"mutability":"mutable","name":"token","nameLocation":"2493:5:11","nodeType":"VariableDeclaration","scope":2103,"src":"2486:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2095,"nodeType":"UserDefinedTypeName","pathNode":{"id":2094,"name":"IERC20","nameLocations":["2486:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2486:6:11"},"referencedDeclaration":3290,"src":"2486:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2098,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:11","nodeType":"VariableDeclaration","scope":2103,"src":"2500:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:11"},"returnParameters":{"id":2102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2101,"mutability":"mutable","name":"credit","nameLocation":"2546:6:11","nodeType":"VariableDeclaration","scope":2103,"src":"2538:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2100,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:11"},"scope":2214,"src":"2470:84:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2104,"nodeType":"StructuredDocumentation","src":"2560:315:11","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":2114,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:11","nodeType":"FunctionDefinition","parameters":{"id":2112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2107,"mutability":"mutable","name":"token","nameLocation":"2903:5:11","nodeType":"VariableDeclaration","scope":2114,"src":"2896:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2106,"nodeType":"UserDefinedTypeName","pathNode":{"id":2105,"name":"IERC20","nameLocations":["2896:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2896:6:11"},"referencedDeclaration":3290,"src":"2896:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2109,"mutability":"mutable","name":"to","nameLocation":"2918:2:11","nodeType":"VariableDeclaration","scope":2114,"src":"2910:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2108,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2111,"mutability":"mutable","name":"amount","nameLocation":"2930:6:11","nodeType":"VariableDeclaration","scope":2114,"src":"2922:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2110,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:11"},"returnParameters":{"id":2113,"nodeType":"ParameterList","parameters":[],"src":"2946:0:11"},"scope":2214,"src":"2880:67:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2115,"nodeType":"StructuredDocumentation","src":"3161:412:11","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":2127,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:11","nodeType":"FunctionDefinition","parameters":{"id":2119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2118,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:11","nodeType":"VariableDeclaration","scope":2127,"src":"3601:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2406_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":2117,"nodeType":"UserDefinedTypeName","pathNode":{"id":2116,"name":"VaultSwapParams","nameLocations":["3601:15:11"],"nodeType":"IdentifierPath","referencedDeclaration":2406,"src":"3601:15:11"},"referencedDeclaration":2406,"src":"3601:15:11","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2406_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:11"},"returnParameters":{"id":2126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2121,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:11","nodeType":"VariableDeclaration","scope":2127,"src":"3664:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2120,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2123,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:11","nodeType":"VariableDeclaration","scope":2127,"src":"3693:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2122,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2125,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:11","nodeType":"VariableDeclaration","scope":2127,"src":"3714:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2124,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:11"},"scope":2214,"src":"3578:158:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2128,"nodeType":"StructuredDocumentation","src":"3954:523:11","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":2141,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:11","nodeType":"FunctionDefinition","parameters":{"id":2132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2131,"mutability":"mutable","name":"params","nameLocation":"4539:6:11","nodeType":"VariableDeclaration","scope":2141,"src":"4513:32:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2475_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":2130,"nodeType":"UserDefinedTypeName","pathNode":{"id":2129,"name":"AddLiquidityParams","nameLocations":["4513:18:11"],"nodeType":"IdentifierPath","referencedDeclaration":2475,"src":"4513:18:11"},"referencedDeclaration":2475,"src":"4513:18:11","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2475_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:11"},"returnParameters":{"id":2140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2135,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:11","nodeType":"VariableDeclaration","scope":2141,"src":"4570:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2133,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2134,"nodeType":"ArrayTypeName","src":"4570:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2137,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:11","nodeType":"VariableDeclaration","scope":2141,"src":"4598:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2136,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2139,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:11","nodeType":"VariableDeclaration","scope":2141,"src":"4620:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2138,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:11"},"scope":2214,"src":"4482:163:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2142,"nodeType":"StructuredDocumentation","src":"4864:644:11","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":2155,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:11","nodeType":"FunctionDefinition","parameters":{"id":2146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2145,"mutability":"mutable","name":"params","nameLocation":"5576:6:11","nodeType":"VariableDeclaration","scope":2155,"src":"5547:35:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2496_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":2144,"nodeType":"UserDefinedTypeName","pathNode":{"id":2143,"name":"RemoveLiquidityParams","nameLocations":["5547:21:11"],"nodeType":"IdentifierPath","referencedDeclaration":2496,"src":"5547:21:11"},"referencedDeclaration":2496,"src":"5547:21:11","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2496_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:11"},"returnParameters":{"id":2154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2148,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:11","nodeType":"VariableDeclaration","scope":2155,"src":"5607:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2147,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2151,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:11","nodeType":"VariableDeclaration","scope":2155,"src":"5628:27:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2149,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2150,"nodeType":"ArrayTypeName","src":"5628:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2153,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:11","nodeType":"VariableDeclaration","scope":2155,"src":"5657:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2152,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:11"},"scope":2214,"src":"5513:169:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2156,"nodeType":"StructuredDocumentation","src":"5912:385:11","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":2168,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:11","nodeType":"FunctionDefinition","parameters":{"id":2162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2158,"mutability":"mutable","name":"pool","nameLocation":"6361:4:11","nodeType":"VariableDeclaration","scope":2168,"src":"6353:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2157,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2161,"mutability":"mutable","name":"token","nameLocation":"6382:5:11","nodeType":"VariableDeclaration","scope":2168,"src":"6375:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2160,"nodeType":"UserDefinedTypeName","pathNode":{"id":2159,"name":"IERC20","nameLocations":["6375:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"6375:6:11"},"referencedDeclaration":3290,"src":"6375:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:11"},"returnParameters":{"id":2167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2164,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:11","nodeType":"VariableDeclaration","scope":2168,"src":"6417:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2163,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2166,"mutability":"mutable","name":"index","nameLocation":"6445:5:11","nodeType":"VariableDeclaration","scope":2168,"src":"6437:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2165,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:11"},"scope":2214,"src":"6302:150:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2169,"nodeType":"StructuredDocumentation","src":"6683:460:11","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":2180,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:11","nodeType":"FunctionDefinition","parameters":{"id":2176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2171,"mutability":"mutable","name":"owner","nameLocation":"7174:5:11","nodeType":"VariableDeclaration","scope":2180,"src":"7166:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2170,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2173,"mutability":"mutable","name":"to","nameLocation":"7189:2:11","nodeType":"VariableDeclaration","scope":2180,"src":"7181:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2172,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2175,"mutability":"mutable","name":"amount","nameLocation":"7201:6:11","nodeType":"VariableDeclaration","scope":2180,"src":"7193:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2174,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:11"},"returnParameters":{"id":2179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2178,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2180,"src":"7227:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2177,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:11"},"scope":2214,"src":"7148:85:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2181,"nodeType":"StructuredDocumentation","src":"7239:544:11","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":2194,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:11","nodeType":"FunctionDefinition","parameters":{"id":2190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2183,"mutability":"mutable","name":"spender","nameLocation":"7818:7:11","nodeType":"VariableDeclaration","scope":2194,"src":"7810:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2182,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2185,"mutability":"mutable","name":"from","nameLocation":"7835:4:11","nodeType":"VariableDeclaration","scope":2194,"src":"7827:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2184,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2187,"mutability":"mutable","name":"to","nameLocation":"7849:2:11","nodeType":"VariableDeclaration","scope":2194,"src":"7841:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2186,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2189,"mutability":"mutable","name":"amount","nameLocation":"7861:6:11","nodeType":"VariableDeclaration","scope":2194,"src":"7853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2188,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:11"},"returnParameters":{"id":2193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2192,"mutability":"mutable","name":"success","nameLocation":"7892:7:11","nodeType":"VariableDeclaration","scope":2194,"src":"7887:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2191,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:11"},"scope":2214,"src":"7788:113:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2195,"nodeType":"StructuredDocumentation","src":"8128:575:11","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":2207,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:11","nodeType":"FunctionDefinition","parameters":{"id":2199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2198,"mutability":"mutable","name":"params","nameLocation":"8784:6:11","nodeType":"VariableDeclaration","scope":2207,"src":"8752:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2514_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":2197,"nodeType":"UserDefinedTypeName","pathNode":{"id":2196,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:11"],"nodeType":"IdentifierPath","referencedDeclaration":2514,"src":"8752:24:11"},"referencedDeclaration":2514,"src":"8752:24:11","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2514_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:11"},"returnParameters":{"id":2206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:11","nodeType":"VariableDeclaration","scope":2207,"src":"8815:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2200,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2203,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:11","nodeType":"VariableDeclaration","scope":2207,"src":"8844:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2202,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2205,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:11","nodeType":"VariableDeclaration","scope":2207,"src":"8865:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2204,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:11"},"scope":2214,"src":"8708:179:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2208,"nodeType":"StructuredDocumentation","src":"9115:345:11","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":2213,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:11","nodeType":"FunctionDefinition","parameters":{"id":2209,"nodeType":"ParameterList","parameters":[],"src":"9491:2:11"},"returnParameters":{"id":2212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2211,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:11","nodeType":"VariableDeclaration","scope":2213,"src":"9517:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2210,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:11"},"scope":2214,"src":"9465:76:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2215,"src":"407:9136:11","usedErrors":[],"usedEvents":[]}],"src":"46:9498:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AddLiquidityParams":[2475],"AfterSwapParams":[2453],"BufferWrapOrUnwrapParams":[2514],"FEE_BITLENGTH":[2517],"FEE_SCALING_FACTOR":[2520],"HookFlags":[2279],"HooksConfig":[2303],"IERC20":[3290],"IERC4626":[3212],"IRateProvider":[24],"LiquidityManagement":[2232],"MAX_FEE_PERCENTAGE":[2523],"PoolConfig":[2257],"PoolConfigBits":[2234],"PoolData":[2381],"PoolRoleAccounts":[2329],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"RemoveLiquidityParams":[2496],"Rounding":[2384],"SwapKind":[2387],"SwapState":[2313],"TokenConfig":[2346],"TokenInfo":[2356],"TokenType":[2333],"VaultState":[2321],"VaultSwapParams":[2406],"WrappingDirection":[2499]},"id":2524,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2216,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2218,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2524,"sourceUnit":3291,"src":"72:72:12","symbolAliases":[{"foreign":{"id":2217,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2220,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2524,"sourceUnit":3213,"src":"145:75:12","symbolAliases":[{"foreign":{"id":2219,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"154:8:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":2222,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2524,"sourceUnit":25,"src":"222:76:12","symbolAliases":[{"foreign":{"id":2221,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"231:13:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":2223,"nodeType":"StructuredDocumentation","src":"300:472:12","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":2232,"members":[{"constant":false,"id":2225,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:12","nodeType":"VariableDeclaration","scope":2232,"src":"806:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2224,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2227,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:12","nodeType":"VariableDeclaration","scope":2232,"src":"843:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2226,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2229,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:12","nodeType":"VariableDeclaration","scope":2232,"src":"878:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2228,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2231,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:12","nodeType":"VariableDeclaration","scope":2232,"src":"916:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2230,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:12","nodeType":"StructDefinition","scope":2524,"src":"773:165:12","visibility":"public"},{"canonicalName":"PoolConfigBits","id":2234,"name":"PoolConfigBits","nameLocation":"1015:14:12","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:12","underlyingType":{"id":2233,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":2235,"nodeType":"StructuredDocumentation","src":"1043:1034:12","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":2257,"members":[{"constant":false,"id":2238,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:12","nodeType":"VariableDeclaration","scope":2257,"src":"2102:39:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2237,"nodeType":"UserDefinedTypeName","pathNode":{"id":2236,"name":"LiquidityManagement","nameLocations":["2102:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"2102:19:12"},"referencedDeclaration":2232,"src":"2102:19:12","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":2240,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:12","nodeType":"VariableDeclaration","scope":2257,"src":"2147:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2239,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2242,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:12","nodeType":"VariableDeclaration","scope":2257,"src":"2184:34:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2241,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2244,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:12","nodeType":"VariableDeclaration","scope":2257,"src":"2224:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2246,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:12","nodeType":"VariableDeclaration","scope":2257,"src":"2265:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":2245,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:12","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":2248,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:12","nodeType":"VariableDeclaration","scope":2257,"src":"2295:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2247,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2250,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:12","nodeType":"VariableDeclaration","scope":2257,"src":"2326:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2249,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2252,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:12","nodeType":"VariableDeclaration","scope":2257,"src":"2353:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2251,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2254,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:12","nodeType":"VariableDeclaration","scope":2257,"src":"2381:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2253,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2256,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:12","nodeType":"VariableDeclaration","scope":2257,"src":"2404:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2255,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:12","nodeType":"StructDefinition","scope":2524,"src":"2078:354:12","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":2258,"nodeType":"StructuredDocumentation","src":"2434:352:12","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":2279,"members":[{"constant":false,"id":2260,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:12","nodeType":"VariableDeclaration","scope":2279,"src":"2810:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2259,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:12","nodeType":"VariableDeclaration","scope":2279,"src":"2846:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2261,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2264,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:12","nodeType":"VariableDeclaration","scope":2279,"src":"2883:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2263,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2266,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:12","nodeType":"VariableDeclaration","scope":2279,"src":"2919:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2265,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2268,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:12","nodeType":"VariableDeclaration","scope":2279,"src":"2961:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2267,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2270,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:12","nodeType":"VariableDeclaration","scope":2279,"src":"2992:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2269,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2272,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:12","nodeType":"VariableDeclaration","scope":2279,"src":"3022:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2271,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2274,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:12","nodeType":"VariableDeclaration","scope":2279,"src":"3061:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2273,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2276,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:12","nodeType":"VariableDeclaration","scope":2279,"src":"3099:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2275,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2278,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:12","nodeType":"VariableDeclaration","scope":2279,"src":"3141:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2277,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:12","nodeType":"StructDefinition","scope":2524,"src":"2787:392:12","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":2280,"nodeType":"StructuredDocumentation","src":"3181:101:12","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":2303,"members":[{"constant":false,"id":2282,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:12","nodeType":"VariableDeclaration","scope":2303,"src":"3307:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2281,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2284,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:12","nodeType":"VariableDeclaration","scope":2303,"src":"3343:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2283,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2286,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:12","nodeType":"VariableDeclaration","scope":2303,"src":"3380:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2285,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2288,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:12","nodeType":"VariableDeclaration","scope":2303,"src":"3416:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2287,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2290,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:12","nodeType":"VariableDeclaration","scope":2303,"src":"3458:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2289,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2292,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:12","nodeType":"VariableDeclaration","scope":2303,"src":"3489:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2291,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2294,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:12","nodeType":"VariableDeclaration","scope":2303,"src":"3519:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2293,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2296,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:12","nodeType":"VariableDeclaration","scope":2303,"src":"3558:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2295,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2298,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:12","nodeType":"VariableDeclaration","scope":2303,"src":"3596:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2297,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2300,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:12","nodeType":"VariableDeclaration","scope":2303,"src":"3638:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2299,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2302,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:12","nodeType":"VariableDeclaration","scope":2303,"src":"3679:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2301,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:12","nodeType":"StructDefinition","scope":2524,"src":"3282:421:12","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":2304,"nodeType":"StructuredDocumentation","src":"3705:364:12","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":2313,"members":[{"constant":false,"id":2306,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:12","nodeType":"VariableDeclaration","scope":2313,"src":"4093:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2305,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2308,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:12","nodeType":"VariableDeclaration","scope":2313,"src":"4114:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2307,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2310,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:12","nodeType":"VariableDeclaration","scope":2313,"src":"4136:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2309,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2312,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:12","nodeType":"VariableDeclaration","scope":2313,"src":"4169:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2311,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:12","nodeType":"StructDefinition","scope":2524,"src":"4070:127:12","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":2314,"nodeType":"StructuredDocumentation","src":"4199:381:12","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":2321,"members":[{"constant":false,"id":2316,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:12","nodeType":"VariableDeclaration","scope":2321,"src":"4605:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2315,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2318,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:12","nodeType":"VariableDeclaration","scope":2321,"src":"4631:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2317,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2320,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:12","nodeType":"VariableDeclaration","scope":2321,"src":"4655:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2319,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:12","nodeType":"StructDefinition","scope":2524,"src":"4581:98:12","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":2322,"nodeType":"StructuredDocumentation","src":"4681:461:12","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":2329,"members":[{"constant":false,"id":2324,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:12","nodeType":"VariableDeclaration","scope":2329,"src":"5173:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2323,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2326,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:12","nodeType":"VariableDeclaration","scope":2329,"src":"5199:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2325,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2328,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:12","nodeType":"VariableDeclaration","scope":2329,"src":"5227:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2327,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:12","nodeType":"StructDefinition","scope":2524,"src":"5143:106:12","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":2330,"nodeType":"StructuredDocumentation","src":"9245:1024:12","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":2333,"members":[{"id":2331,"name":"STANDARD","nameLocation":"10291:8:12","nodeType":"EnumValue","src":"10291:8:12"},{"id":2332,"name":"WITH_RATE","nameLocation":"10305:9:12","nodeType":"EnumValue","src":"10305:9:12"}],"name":"TokenType","nameLocation":"10275:9:12","nodeType":"EnumDefinition","src":"10270:46:12"},{"canonicalName":"TokenConfig","documentation":{"id":2334,"nodeType":"StructuredDocumentation","src":"10318:915:12","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2346,"members":[{"constant":false,"id":2337,"mutability":"mutable","name":"token","nameLocation":"11266:5:12","nodeType":"VariableDeclaration","scope":2346,"src":"11259:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2336,"nodeType":"UserDefinedTypeName","pathNode":{"id":2335,"name":"IERC20","nameLocations":["11259:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"11259:6:12"},"referencedDeclaration":3290,"src":"11259:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:12","nodeType":"VariableDeclaration","scope":2346,"src":"11277:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2333","typeString":"enum TokenType"},"typeName":{"id":2339,"nodeType":"UserDefinedTypeName","pathNode":{"id":2338,"name":"TokenType","nameLocations":["11277:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2333,"src":"11277:9:12"},"referencedDeclaration":2333,"src":"11277:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2333","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2343,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:12","nodeType":"VariableDeclaration","scope":2346,"src":"11302:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":2342,"nodeType":"UserDefinedTypeName","pathNode":{"id":2341,"name":"IRateProvider","nameLocations":["11302:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11302:13:12"},"referencedDeclaration":24,"src":"11302:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2345,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:12","nodeType":"VariableDeclaration","scope":2346,"src":"11334:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2344,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:12","nodeType":"StructDefinition","scope":2524,"src":"11234:121:12","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":2347,"nodeType":"StructuredDocumentation","src":"11357:592:12","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2356,"members":[{"constant":false,"id":2350,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:12","nodeType":"VariableDeclaration","scope":2356,"src":"11973:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2333","typeString":"enum TokenType"},"typeName":{"id":2349,"nodeType":"UserDefinedTypeName","pathNode":{"id":2348,"name":"TokenType","nameLocations":["11973:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2333,"src":"11973:9:12"},"referencedDeclaration":2333,"src":"11973:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2333","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2353,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:12","nodeType":"VariableDeclaration","scope":2356,"src":"11998:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":2352,"nodeType":"UserDefinedTypeName","pathNode":{"id":2351,"name":"IRateProvider","nameLocations":["11998:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11998:13:12"},"referencedDeclaration":24,"src":"11998:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:12","nodeType":"VariableDeclaration","scope":2356,"src":"12030:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2354,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:12","nodeType":"StructDefinition","scope":2524,"src":"11950:101:12","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":2357,"nodeType":"StructuredDocumentation","src":"12053:761:12","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":2381,"members":[{"constant":false,"id":2360,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:12","nodeType":"VariableDeclaration","scope":2381,"src":"12837:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2234","typeString":"PoolConfigBits"},"typeName":{"id":2359,"nodeType":"UserDefinedTypeName","pathNode":{"id":2358,"name":"PoolConfigBits","nameLocations":["12837:14:12"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"12837:14:12"},"referencedDeclaration":2234,"src":"12837:14:12","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2234","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":2364,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:12","nodeType":"VariableDeclaration","scope":2381,"src":"12872:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2362,"nodeType":"UserDefinedTypeName","pathNode":{"id":2361,"name":"IERC20","nameLocations":["12872:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"12872:6:12"},"referencedDeclaration":3290,"src":"12872:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2363,"nodeType":"ArrayTypeName","src":"12872:8:12","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2368,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:12","nodeType":"VariableDeclaration","scope":2381,"src":"12893:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2356_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":2366,"nodeType":"UserDefinedTypeName","pathNode":{"id":2365,"name":"TokenInfo","nameLocations":["12893:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"12893:9:12"},"referencedDeclaration":2356,"src":"12893:9:12","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2356_storage_ptr","typeString":"struct TokenInfo"}},"id":2367,"nodeType":"ArrayTypeName","src":"12893:11:12","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2356_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":2371,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:12","nodeType":"VariableDeclaration","scope":2381,"src":"12920:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2369,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2370,"nodeType":"ArrayTypeName","src":"12920:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:12","nodeType":"VariableDeclaration","scope":2381,"src":"12947:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2372,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2373,"nodeType":"ArrayTypeName","src":"12947:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2377,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:12","nodeType":"VariableDeclaration","scope":2381,"src":"12983:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2375,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2376,"nodeType":"ArrayTypeName","src":"12983:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2380,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:12","nodeType":"VariableDeclaration","scope":2381,"src":"13009:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2378,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2379,"nodeType":"ArrayTypeName","src":"13009:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:12","nodeType":"StructDefinition","scope":2524,"src":"12815:228:12","visibility":"public"},{"canonicalName":"Rounding","id":2384,"members":[{"id":2382,"name":"ROUND_UP","nameLocation":"13065:8:12","nodeType":"EnumValue","src":"13065:8:12"},{"id":2383,"name":"ROUND_DOWN","nameLocation":"13079:10:12","nodeType":"EnumValue","src":"13079:10:12"}],"name":"Rounding","nameLocation":"13050:8:12","nodeType":"EnumDefinition","src":"13045:46:12"},{"canonicalName":"SwapKind","id":2387,"members":[{"id":2385,"name":"EXACT_IN","nameLocation":"13318:8:12","nodeType":"EnumValue","src":"13318:8:12"},{"id":2386,"name":"EXACT_OUT","nameLocation":"13332:9:12","nodeType":"EnumValue","src":"13332:9:12"}],"name":"SwapKind","nameLocation":"13303:8:12","nodeType":"EnumDefinition","src":"13298:45:12"},{"canonicalName":"VaultSwapParams","documentation":{"id":2388,"nodeType":"StructuredDocumentation","src":"14089:558:12","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":2406,"members":[{"constant":false,"id":2391,"mutability":"mutable","name":"kind","nameLocation":"14686:4:12","nodeType":"VariableDeclaration","scope":2406,"src":"14677:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"},"typeName":{"id":2390,"nodeType":"UserDefinedTypeName","pathNode":{"id":2389,"name":"SwapKind","nameLocations":["14677:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"14677:8:12"},"referencedDeclaration":2387,"src":"14677:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2393,"mutability":"mutable","name":"pool","nameLocation":"14704:4:12","nodeType":"VariableDeclaration","scope":2406,"src":"14696:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2392,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2396,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:12","nodeType":"VariableDeclaration","scope":2406,"src":"14714:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2395,"nodeType":"UserDefinedTypeName","pathNode":{"id":2394,"name":"IERC20","nameLocations":["14714:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"14714:6:12"},"referencedDeclaration":3290,"src":"14714:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2399,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:12","nodeType":"VariableDeclaration","scope":2406,"src":"14734:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2398,"nodeType":"UserDefinedTypeName","pathNode":{"id":2397,"name":"IERC20","nameLocations":["14734:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"14734:6:12"},"referencedDeclaration":3290,"src":"14734:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2401,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:12","nodeType":"VariableDeclaration","scope":2406,"src":"14755:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2400,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2403,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:12","nodeType":"VariableDeclaration","scope":2406,"src":"14783:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2402,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2405,"mutability":"mutable","name":"userData","nameLocation":"14811:8:12","nodeType":"VariableDeclaration","scope":2406,"src":"14805:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2404,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:12","nodeType":"StructDefinition","scope":2524,"src":"14648:174:12","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":2407,"nodeType":"StructuredDocumentation","src":"14824:530:12","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":2424,"members":[{"constant":false,"id":2410,"mutability":"mutable","name":"kind","nameLocation":"15392:4:12","nodeType":"VariableDeclaration","scope":2424,"src":"15383:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"},"typeName":{"id":2409,"nodeType":"UserDefinedTypeName","pathNode":{"id":2408,"name":"SwapKind","nameLocations":["15383:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"15383:8:12"},"referencedDeclaration":2387,"src":"15383:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2412,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:12","nodeType":"VariableDeclaration","scope":2424,"src":"15402:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2411,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2415,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:12","nodeType":"VariableDeclaration","scope":2424,"src":"15435:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2413,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2414,"nodeType":"ArrayTypeName","src":"15435:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2417,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:12","nodeType":"VariableDeclaration","scope":2424,"src":"15467:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2416,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2419,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:12","nodeType":"VariableDeclaration","scope":2424,"src":"15488:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2418,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2421,"mutability":"mutable","name":"router","nameLocation":"15518:6:12","nodeType":"VariableDeclaration","scope":2424,"src":"15510:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2420,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2423,"mutability":"mutable","name":"userData","nameLocation":"15536:8:12","nodeType":"VariableDeclaration","scope":2424,"src":"15530:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2422,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:12","nodeType":"StructDefinition","scope":2524,"src":"15355:192:12","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":2425,"nodeType":"StructuredDocumentation","src":"15549:813:12","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":2453,"members":[{"constant":false,"id":2428,"mutability":"mutable","name":"kind","nameLocation":"16401:4:12","nodeType":"VariableDeclaration","scope":2453,"src":"16392:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"},"typeName":{"id":2427,"nodeType":"UserDefinedTypeName","pathNode":{"id":2426,"name":"SwapKind","nameLocations":["16392:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"16392:8:12"},"referencedDeclaration":2387,"src":"16392:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2431,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:12","nodeType":"VariableDeclaration","scope":2453,"src":"16411:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2430,"nodeType":"UserDefinedTypeName","pathNode":{"id":2429,"name":"IERC20","nameLocations":["16411:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"16411:6:12"},"referencedDeclaration":3290,"src":"16411:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2434,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:12","nodeType":"VariableDeclaration","scope":2453,"src":"16431:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2433,"nodeType":"UserDefinedTypeName","pathNode":{"id":2432,"name":"IERC20","nameLocations":["16431:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"16431:6:12"},"referencedDeclaration":3290,"src":"16431:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2436,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:12","nodeType":"VariableDeclaration","scope":2453,"src":"16452:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2435,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2438,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:12","nodeType":"VariableDeclaration","scope":2453,"src":"16482:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2437,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2440,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:12","nodeType":"VariableDeclaration","scope":2453,"src":"16513:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2439,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2442,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:12","nodeType":"VariableDeclaration","scope":2453,"src":"16549:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2441,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2444,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:12","nodeType":"VariableDeclaration","scope":2453,"src":"16586:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2443,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2446,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:12","nodeType":"VariableDeclaration","scope":2453,"src":"16624:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2445,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2448,"mutability":"mutable","name":"router","nameLocation":"16665:6:12","nodeType":"VariableDeclaration","scope":2453,"src":"16657:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2447,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2450,"mutability":"mutable","name":"pool","nameLocation":"16685:4:12","nodeType":"VariableDeclaration","scope":2453,"src":"16677:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2449,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2452,"mutability":"mutable","name":"userData","nameLocation":"16701:8:12","nodeType":"VariableDeclaration","scope":2453,"src":"16695:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2451,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:12","nodeType":"StructDefinition","scope":2524,"src":"16363:349:12","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":2459,"members":[{"id":2454,"name":"PROPORTIONAL","nameLocation":"16951:12:12","nodeType":"EnumValue","src":"16951:12:12"},{"id":2455,"name":"UNBALANCED","nameLocation":"16969:10:12","nodeType":"EnumValue","src":"16969:10:12"},{"id":2456,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:12","nodeType":"EnumValue","src":"16985:22:12"},{"id":2457,"name":"DONATION","nameLocation":"17013:8:12","nodeType":"EnumValue","src":"17013:8:12"},{"id":2458,"name":"CUSTOM","nameLocation":"17027:6:12","nodeType":"EnumValue","src":"17027:6:12"}],"name":"AddLiquidityKind","nameLocation":"16928:16:12","nodeType":"EnumDefinition","src":"16923:112:12"},{"canonicalName":"AddLiquidityParams","documentation":{"id":2460,"nodeType":"StructuredDocumentation","src":"17037:320:12","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":2475,"members":[{"constant":false,"id":2462,"mutability":"mutable","name":"pool","nameLocation":"17398:4:12","nodeType":"VariableDeclaration","scope":2475,"src":"17390:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2461,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2464,"mutability":"mutable","name":"to","nameLocation":"17416:2:12","nodeType":"VariableDeclaration","scope":2475,"src":"17408:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2463,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2467,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:12","nodeType":"VariableDeclaration","scope":2475,"src":"17424:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2465,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2466,"nodeType":"ArrayTypeName","src":"17424:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2469,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:12","nodeType":"VariableDeclaration","scope":2475,"src":"17452:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2468,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2472,"mutability":"mutable","name":"kind","nameLocation":"17498:4:12","nodeType":"VariableDeclaration","scope":2475,"src":"17481:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"},"typeName":{"id":2471,"nodeType":"UserDefinedTypeName","pathNode":{"id":2470,"name":"AddLiquidityKind","nameLocations":["17481:16:12"],"nodeType":"IdentifierPath","referencedDeclaration":2459,"src":"17481:16:12"},"referencedDeclaration":2459,"src":"17481:16:12","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2474,"mutability":"mutable","name":"userData","nameLocation":"17514:8:12","nodeType":"VariableDeclaration","scope":2475,"src":"17508:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2473,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:12","nodeType":"StructDefinition","scope":2524,"src":"17358:167:12","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":2480,"members":[{"id":2476,"name":"PROPORTIONAL","nameLocation":"17770:12:12","nodeType":"EnumValue","src":"17770:12:12"},{"id":2477,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:12","nodeType":"EnumValue","src":"17788:21:12"},{"id":2478,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:12","nodeType":"EnumValue","src":"17815:22:12"},{"id":2479,"name":"CUSTOM","nameLocation":"17843:6:12","nodeType":"EnumValue","src":"17843:6:12"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:12","nodeType":"EnumDefinition","src":"17739:112:12"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":2481,"nodeType":"StructuredDocumentation","src":"17853:330:12","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":2496,"members":[{"constant":false,"id":2483,"mutability":"mutable","name":"pool","nameLocation":"18227:4:12","nodeType":"VariableDeclaration","scope":2496,"src":"18219:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2482,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2485,"mutability":"mutable","name":"from","nameLocation":"18245:4:12","nodeType":"VariableDeclaration","scope":2496,"src":"18237:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2484,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2487,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:12","nodeType":"VariableDeclaration","scope":2496,"src":"18255:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2486,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2490,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:12","nodeType":"VariableDeclaration","scope":2496,"src":"18283:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2488,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2489,"nodeType":"ArrayTypeName","src":"18283:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2493,"mutability":"mutable","name":"kind","nameLocation":"18332:4:12","nodeType":"VariableDeclaration","scope":2496,"src":"18312:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2492,"nodeType":"UserDefinedTypeName","pathNode":{"id":2491,"name":"RemoveLiquidityKind","nameLocations":["18312:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2480,"src":"18312:19:12"},"referencedDeclaration":2480,"src":"18312:19:12","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2495,"mutability":"mutable","name":"userData","nameLocation":"18348:8:12","nodeType":"VariableDeclaration","scope":2496,"src":"18342:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2494,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:12","nodeType":"StructDefinition","scope":2524,"src":"18184:175:12","visibility":"public"},{"canonicalName":"WrappingDirection","id":2499,"members":[{"id":2497,"name":"WRAP","nameLocation":"18602:4:12","nodeType":"EnumValue","src":"18602:4:12"},{"id":2498,"name":"UNWRAP","nameLocation":"18612:6:12","nodeType":"EnumValue","src":"18612:6:12"}],"name":"WrappingDirection","nameLocation":"18578:17:12","nodeType":"EnumDefinition","src":"18573:47:12"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":2500,"nodeType":"StructuredDocumentation","src":"18622:499:12","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":2514,"members":[{"constant":false,"id":2503,"mutability":"mutable","name":"kind","nameLocation":"19169:4:12","nodeType":"VariableDeclaration","scope":2514,"src":"19160:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"},"typeName":{"id":2502,"nodeType":"UserDefinedTypeName","pathNode":{"id":2501,"name":"SwapKind","nameLocations":["19160:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"19160:8:12"},"referencedDeclaration":2387,"src":"19160:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2506,"mutability":"mutable","name":"direction","nameLocation":"19197:9:12","nodeType":"VariableDeclaration","scope":2514,"src":"19179:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2499","typeString":"enum WrappingDirection"},"typeName":{"id":2505,"nodeType":"UserDefinedTypeName","pathNode":{"id":2504,"name":"WrappingDirection","nameLocations":["19179:17:12"],"nodeType":"IdentifierPath","referencedDeclaration":2499,"src":"19179:17:12"},"referencedDeclaration":2499,"src":"19179:17:12","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2499","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":2509,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:12","nodeType":"VariableDeclaration","scope":2514,"src":"19212:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":2508,"nodeType":"UserDefinedTypeName","pathNode":{"id":2507,"name":"IERC4626","nameLocations":["19212:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"19212:8:12"},"referencedDeclaration":3212,"src":"19212:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2511,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:12","nodeType":"VariableDeclaration","scope":2514,"src":"19239:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2510,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2513,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:12","nodeType":"VariableDeclaration","scope":2514,"src":"19267:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2512,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:12","nodeType":"StructDefinition","scope":2524,"src":"19122:164:12","visibility":"public"},{"constant":true,"id":2517,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:12","nodeType":"VariableDeclaration","scope":2524,"src":"19594:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2515,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":2516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:12","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":2520,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:12","nodeType":"VariableDeclaration","scope":2524,"src":"19631:42:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2518,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":2519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:12","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":2523,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:12","nodeType":"VariableDeclaration","scope":2524,"src":"19879:48:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2521,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":2522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:12","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:12"},"id":12},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[2603],"IAuthentication":[14]},"id":2604,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2525,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":2527,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2604,"sourceUnit":15,"src":"72:116:13","symbolAliases":[{"foreign":{"id":2526,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2529,"name":"IAuthentication","nameLocations":["625:15:13"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"625:15:13"},"id":2530,"nodeType":"InheritanceSpecifier","src":"625:15:13"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2528,"nodeType":"StructuredDocumentation","src":"190:398:13","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":2603,"linearizedBaseContracts":[2603,14],"name":"Authentication","nameLocation":"607:14:13","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2532,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:13","nodeType":"VariableDeclaration","scope":2603,"src":"647:48:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2531,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":2542,"nodeType":"Block","src":"1337:63:13","statements":[{"expression":{"id":2540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2538,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2532,"src":"1347:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2539,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"1372:21:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2541,"nodeType":"ExpressionStatement","src":"1347:46:13"}]},"documentation":{"id":2533,"nodeType":"StructuredDocumentation","src":"702:587:13","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":2543,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2535,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:13","nodeType":"VariableDeclaration","scope":2543,"src":"1306:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2534,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:13"},"returnParameters":{"id":2537,"nodeType":"ParameterList","parameters":[],"src":"1337:0:13"},"scope":2603,"src":"1294:106:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2550,"nodeType":"Block","src":"1549:49:13","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2546,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2574,"src":"1559:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2548,"nodeType":"ExpressionStatement","src":"1559:21:13"},{"id":2549,"nodeType":"PlaceholderStatement","src":"1590:1:13"}]},"documentation":{"id":2544,"nodeType":"StructuredDocumentation","src":"1406:114:13","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":2551,"name":"authenticate","nameLocation":"1534:12:13","nodeType":"ModifierDefinition","parameters":{"id":2545,"nodeType":"ParameterList","parameters":[],"src":"1546:2:13"},"src":"1525:73:13","virtual":false,"visibility":"internal"},{"body":{"id":2573,"nodeType":"Block","src":"1733:156:13","statements":[{"assignments":[2556],"declarations":[{"constant":false,"id":2556,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:13","nodeType":"VariableDeclaration","scope":2573,"src":"1743:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2555,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2561,"initialValue":{"arguments":[{"expression":{"id":2558,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:13","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":2557,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2592,"src":"1762:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":2560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:13"},{"condition":{"id":2567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:13","subExpression":{"arguments":[{"id":2563,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2556,"src":"1810:8:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2564,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:13","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2562,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2602,"src":"1798:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2572,"nodeType":"IfStatement","src":"1793:90:13","trueBody":{"id":2571,"nodeType":"Block","src":"1833:50:13","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2568,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"1854:16:13","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2570,"nodeType":"RevertStatement","src":"1847:25:13"}]}}]},"documentation":{"id":2552,"nodeType":"StructuredDocumentation","src":"1604:79:13","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":2574,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:13","nodeType":"FunctionDefinition","parameters":{"id":2553,"nodeType":"ParameterList","parameters":[],"src":"1716:2:13"},"returnParameters":{"id":2554,"nodeType":"ParameterList","parameters":[],"src":"1733:0:13"},"scope":2603,"src":"1688:201:13","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[13],"body":{"id":2591,"nodeType":"Block","src":"2008:353:13","statements":[{"expression":{"arguments":[{"arguments":[{"id":2586,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2532,"src":"2320:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2587,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"2344:8:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":2584,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:13","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2583,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:13","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2582,"id":2590,"nodeType":"Return","src":"2286:68:13"}]},"documentation":{"id":2575,"nodeType":"StructuredDocumentation","src":"1895:31:13","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":2592,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:13","nodeType":"FunctionDefinition","overrides":{"id":2579,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:13"},"parameters":{"id":2578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2577,"mutability":"mutable","name":"selector","nameLocation":"1959:8:13","nodeType":"VariableDeclaration","scope":2592,"src":"1952:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2576,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:13"},"returnParameters":{"id":2582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2592,"src":"1999:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2580,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:13"},"scope":2603,"src":"1931:430:13","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":2593,"nodeType":"StructuredDocumentation","src":"2367:304:13","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":2602,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:13","nodeType":"FunctionDefinition","parameters":{"id":2598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2595,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:13","nodeType":"VariableDeclaration","scope":2602,"src":"2697:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2594,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2597,"mutability":"mutable","name":"user","nameLocation":"2723:4:13","nodeType":"VariableDeclaration","scope":2602,"src":"2715:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2596,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:13"},"returnParameters":{"id":2601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2602,"src":"2760:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2599,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:13"},"scope":2603,"src":"2676:90:13","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":2604,"src":"589:2179:13","usedErrors":[5],"usedEvents":[]}],"src":"46:2723:13"},"id":13},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[2635],"IERC20":[3290]},"id":2636,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2605,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2607,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2636,"sourceUnit":3291,"src":"72:72:14","symbolAliases":[{"foreign":{"id":2606,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":2608,"nodeType":"StructuredDocumentation","src":"146:71:14","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":2635,"linearizedBaseContracts":[2635],"name":"CastingHelpers","nameLocation":"225:14:14","nodeType":"ContractDefinition","nodes":[{"body":{"id":2620,"nodeType":"Block","src":"410:140:14","statements":[{"AST":{"nativeSrc":"501:43:14","nodeType":"YulBlock","src":"501:43:14","statements":[{"nativeSrc":"515:19:14","nodeType":"YulAssignment","src":"515:19:14","value":{"name":"addresses","nativeSrc":"525:9:14","nodeType":"YulIdentifier","src":"525:9:14"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:14","nodeType":"YulIdentifier","src":"515:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2612,"isOffset":false,"isSlot":false,"src":"525:9:14","valueSize":1},{"declaration":2617,"isOffset":false,"isSlot":false,"src":"515:6:14","valueSize":1}],"flags":["memory-safe"],"id":2619,"nodeType":"InlineAssembly","src":"476:68:14"}]},"documentation":{"id":2609,"nodeType":"StructuredDocumentation","src":"246:66:14","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":2621,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:14","nodeType":"FunctionDefinition","parameters":{"id":2613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2612,"mutability":"mutable","name":"addresses","nameLocation":"352:9:14","nodeType":"VariableDeclaration","scope":2621,"src":"335:26:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2610,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2611,"nodeType":"ArrayTypeName","src":"335:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:14"},"returnParameters":{"id":2618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2617,"mutability":"mutable","name":"tokens","nameLocation":"402:6:14","nodeType":"VariableDeclaration","scope":2621,"src":"386:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2615,"nodeType":"UserDefinedTypeName","pathNode":{"id":2614,"name":"IERC20","nameLocations":["386:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"386:6:14"},"referencedDeclaration":3290,"src":"386:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2616,"nodeType":"ArrayTypeName","src":"386:8:14","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:14"},"scope":2635,"src":"317:233:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2633,"nodeType":"Block","src":"712:140:14","statements":[{"AST":{"nativeSrc":"803:43:14","nodeType":"YulBlock","src":"803:43:14","statements":[{"nativeSrc":"817:19:14","nodeType":"YulAssignment","src":"817:19:14","value":{"name":"tokens","nativeSrc":"830:6:14","nodeType":"YulIdentifier","src":"830:6:14"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:14","nodeType":"YulIdentifier","src":"817:9:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2630,"isOffset":false,"isSlot":false,"src":"817:9:14","valueSize":1},{"declaration":2626,"isOffset":false,"isSlot":false,"src":"830:6:14","valueSize":1}],"flags":["memory-safe"],"id":2632,"nodeType":"InlineAssembly","src":"778:68:14"}]},"documentation":{"id":2622,"nodeType":"StructuredDocumentation","src":"556:57:14","text":"@dev Returns an IERC20[] array as an address[] array."},"id":2634,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:14","nodeType":"FunctionDefinition","parameters":{"id":2627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2626,"mutability":"mutable","name":"tokens","nameLocation":"653:6:14","nodeType":"VariableDeclaration","scope":2634,"src":"637:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2624,"nodeType":"UserDefinedTypeName","pathNode":{"id":2623,"name":"IERC20","nameLocations":["637:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"637:6:14"},"referencedDeclaration":3290,"src":"637:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2625,"nodeType":"ArrayTypeName","src":"637:8:14","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:14"},"returnParameters":{"id":2631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2630,"mutability":"mutable","name":"addresses","nameLocation":"701:9:14","nodeType":"VariableDeclaration","scope":2634,"src":"684:26:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2628,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2629,"nodeType":"ArrayTypeName","src":"684:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:14"},"scope":2635,"src":"618:234:14","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2636,"src":"217:637:14","usedErrors":[],"usedEvents":[]}],"src":"46:809:14"},"id":14},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[2635],"IERC20":[3290],"InputHelpers":[2936]},"id":2937,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2637,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2937,"sourceUnit":3291,"src":"72:72:15","symbolAliases":[{"foreign":{"id":2638,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":2641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2937,"sourceUnit":2636,"src":"146:54:15","symbolAliases":[{"foreign":{"id":2640,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2635,"src":"155:14:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":2936,"linearizedBaseContracts":[2936],"name":"InputHelpers","nameLocation":"210:12:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2642,"nodeType":"StructuredDocumentation","src":"229:91:15","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":2644,"name":"InputLengthMismatch","nameLocation":"331:19:15","nodeType":"ErrorDefinition","parameters":{"id":2643,"nodeType":"ParameterList","parameters":[],"src":"350:2:15"},"src":"325:28:15"},{"documentation":{"id":2645,"nodeType":"StructuredDocumentation","src":"359:332:15","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":2647,"name":"MultipleNonZeroInputs","nameLocation":"702:21:15","nodeType":"ErrorDefinition","parameters":{"id":2646,"nodeType":"ParameterList","parameters":[],"src":"723:2:15"},"src":"696:30:15"},{"documentation":{"id":2648,"nodeType":"StructuredDocumentation","src":"732:298:15","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":2650,"name":"AllZeroInputs","nameLocation":"1041:13:15","nodeType":"ErrorDefinition","parameters":{"id":2649,"nodeType":"ParameterList","parameters":[],"src":"1054:2:15"},"src":"1035:22:15"},{"documentation":{"id":2651,"nodeType":"StructuredDocumentation","src":"1063:320:15","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":2653,"name":"TokensNotSorted","nameLocation":"1394:15:15","nodeType":"ErrorDefinition","parameters":{"id":2652,"nodeType":"ParameterList","parameters":[],"src":"1409:2:15"},"src":"1388:24:15"},{"body":{"id":2668,"nodeType":"Block","src":"1486:81:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2660,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"1500:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2661,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2657,"src":"1505:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2667,"nodeType":"IfStatement","src":"1496:65:15","trueBody":{"id":2666,"nodeType":"Block","src":"1508:53:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2663,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2644,"src":"1529:19:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2665,"nodeType":"RevertStatement","src":"1522:28:15"}]}}]},"id":2669,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:15","nodeType":"FunctionDefinition","parameters":{"id":2658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2655,"mutability":"mutable","name":"a","nameLocation":"1458:1:15","nodeType":"VariableDeclaration","scope":2669,"src":"1450:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2654,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2657,"mutability":"mutable","name":"b","nameLocation":"1469:1:15","nodeType":"VariableDeclaration","scope":2669,"src":"1461:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2656,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:15"},"returnParameters":{"id":2659,"nodeType":"ParameterList","parameters":[],"src":"1486:0:15"},"scope":2936,"src":"1418:149:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2690,"nodeType":"Block","src":"1652:91:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2678,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2671,"src":"1666:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2679,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2673,"src":"1671:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2681,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2673,"src":"1676:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2682,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"1681:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2689,"nodeType":"IfStatement","src":"1662:75:15","trueBody":{"id":2688,"nodeType":"Block","src":"1684:53:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2685,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2644,"src":"1705:19:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2687,"nodeType":"RevertStatement","src":"1698:28:15"}]}}]},"id":2691,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:15","nodeType":"FunctionDefinition","parameters":{"id":2676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2671,"mutability":"mutable","name":"a","nameLocation":"1613:1:15","nodeType":"VariableDeclaration","scope":2691,"src":"1605:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2670,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2673,"mutability":"mutable","name":"b","nameLocation":"1624:1:15","nodeType":"VariableDeclaration","scope":2691,"src":"1616:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2672,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2675,"mutability":"mutable","name":"c","nameLocation":"1635:1:15","nodeType":"VariableDeclaration","scope":2691,"src":"1627:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2674,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:15"},"returnParameters":{"id":2677,"nodeType":"ParameterList","parameters":[],"src":"1652:0:15"},"scope":2936,"src":"1573:170:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2749,"nodeType":"Block","src":"1938:451:15","statements":[{"assignments":[2700],"declarations":[{"constant":false,"id":2700,"mutability":"mutable","name":"length","nameLocation":"1956:6:15","nodeType":"VariableDeclaration","scope":2749,"src":"1948:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2699,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2703,"initialValue":{"expression":{"id":2701,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2694,"src":"1965:12:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:15","memberName":"length","nodeType":"MemberAccess","src":"1965:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:15"},{"expression":{"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2704,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"1994:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2705,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"2007:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2707,"nodeType":"ExpressionStatement","src":"1994:19:15"},{"body":{"id":2737,"nodeType":"Block","src":"2061:211:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2718,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2694,"src":"2079:12:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2720,"indexExpression":{"id":2719,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"2092:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2736,"nodeType":"IfStatement","src":"2075:187:15","trueBody":{"id":2735,"nodeType":"Block","src":"2101:161:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2723,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"2123:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2724,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"2137:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2730,"nodeType":"IfStatement","src":"2119:97:15","trueBody":{"id":2729,"nodeType":"Block","src":"2145:71:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2726,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2647,"src":"2174:21:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2728,"nodeType":"RevertStatement","src":"2167:30:15"}]}},{"expression":{"id":2733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2731,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"2233:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2732,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"2246:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2734,"nodeType":"ExpressionStatement","src":"2233:14:15"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2712,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"2044:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2713,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"2048:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2738,"initializationExpression":{"assignments":[2709],"declarations":[{"constant":false,"id":2709,"mutability":"mutable","name":"i","nameLocation":"2037:1:15","nodeType":"VariableDeclaration","scope":2738,"src":"2029:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2708,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2711,"initialValue":{"hexValue":"30","id":2710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:15","subExpression":{"id":2715,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"2058:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2717,"nodeType":"ExpressionStatement","src":"2056:3:15"},"nodeType":"ForStatement","src":"2024:248:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2739,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"2286:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2740,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"2300:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2746,"nodeType":"IfStatement","src":"2282:73:15","trueBody":{"id":2745,"nodeType":"Block","src":"2308:47:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2742,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2650,"src":"2329:13:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2744,"nodeType":"RevertStatement","src":"2322:22:15"}]}},{"expression":{"id":2747,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"2372:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2698,"id":2748,"nodeType":"Return","src":"2365:17:15"}]},"id":2750,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:15","nodeType":"FunctionDefinition","parameters":{"id":2695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2694,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:15","nodeType":"VariableDeclaration","scope":2750,"src":"1864:29:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2692,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2693,"nodeType":"ArrayTypeName","src":"1864:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:15"},"returnParameters":{"id":2698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2697,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:15","nodeType":"VariableDeclaration","scope":2750,"src":"1918:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2696,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:15"},"scope":2936,"src":"1835:554:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2827,"nodeType":"Block","src":"3138:376:15","statements":[{"body":{"id":2823,"nodeType":"Block","src":"3196:288:15","statements":[{"body":{"id":2821,"nodeType":"Block","src":"3262:212:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"id":2798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2790,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3284:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2792,"indexExpression":{"id":2791,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3291:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":2793,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3296:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2797,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2794,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3303:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"src":"3284:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2820,"nodeType":"IfStatement","src":"3280:180:15","trueBody":{"id":2819,"nodeType":"Block","src":"3311:149:15","statements":[{"expression":{"id":2817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":2799,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3387:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2801,"indexExpression":{"id":2800,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3394:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},{"baseExpression":{"id":2802,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3398:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2806,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2803,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3405:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}}],"id":2807,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:15","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$3290_$_t_contract$_IERC20_$3290_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":2808,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3416:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2812,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2809,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3423:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},{"baseExpression":{"id":2813,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3431:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2815,"indexExpression":{"id":2814,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3438:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}}],"id":2816,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:15","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$3290_$_t_contract$_IERC20_$3290_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:15","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2818,"nodeType":"ExpressionStatement","src":"3386:55:15"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2779,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3230:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2780,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3234:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:15","memberName":"length","nodeType":"MemberAccess","src":"3234:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2782,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"3250:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2822,"initializationExpression":{"assignments":[2776],"declarations":[{"constant":false,"id":2776,"mutability":"mutable","name":"j","nameLocation":"3223:1:15","nodeType":"VariableDeclaration","scope":2822,"src":"3215:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2775,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2778,"initialValue":{"hexValue":"30","id":2777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:15","subExpression":{"id":2787,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3259:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2789,"nodeType":"ExpressionStatement","src":"3257:3:15"},"nodeType":"ForStatement","src":"3210:264:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2766,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"3168:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2767,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3172:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:15","memberName":"length","nodeType":"MemberAccess","src":"3172:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2824,"initializationExpression":{"assignments":[2763],"declarations":[{"constant":false,"id":2763,"mutability":"mutable","name":"i","nameLocation":"3161:1:15","nodeType":"VariableDeclaration","scope":2824,"src":"3153:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2762,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2765,"initialValue":{"hexValue":"30","id":2764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:15","subExpression":{"id":2772,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"3193:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2774,"nodeType":"ExpressionStatement","src":"3191:3:15"},"nodeType":"ForStatement","src":"3148:336:15"},{"expression":{"id":2825,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3501:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":2761,"id":2826,"nodeType":"Return","src":"3494:13:15"}]},"documentation":{"id":2751,"nodeType":"StructuredDocumentation","src":"2395:654:15","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":2828,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:15","nodeType":"FunctionDefinition","parameters":{"id":2756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2755,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:15","nodeType":"VariableDeclaration","scope":2828,"src":"3074:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2753,"nodeType":"UserDefinedTypeName","pathNode":{"id":2752,"name":"IERC20","nameLocations":["3074:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3074:6:15"},"referencedDeclaration":3290,"src":"3074:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2754,"nodeType":"ArrayTypeName","src":"3074:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:15"},"returnParameters":{"id":2761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2828,"src":"3121:15:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2758,"nodeType":"UserDefinedTypeName","pathNode":{"id":2757,"name":"IERC20","nameLocations":["3121:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3121:6:15"},"referencedDeclaration":3290,"src":"3121:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2759,"nodeType":"ArrayTypeName","src":"3121:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:15"},"scope":2936,"src":"3054:460:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2882,"nodeType":"Block","src":"3686:341:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2836,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"3700:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:15","memberName":"length","nodeType":"MemberAccess","src":"3700:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":2838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2842,"nodeType":"IfStatement","src":"3696:54:15","trueBody":{"id":2841,"nodeType":"Block","src":"3719:31:15","statements":[{"functionReturnParameters":2835,"id":2840,"nodeType":"Return","src":"3733:7:15"}]}},{"assignments":[2845],"declarations":[{"constant":false,"id":2845,"mutability":"mutable","name":"previous","nameLocation":"3767:8:15","nodeType":"VariableDeclaration","scope":2882,"src":"3760:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2844,"nodeType":"UserDefinedTypeName","pathNode":{"id":2843,"name":"IERC20","nameLocations":["3760:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3760:6:15"},"referencedDeclaration":3290,"src":"3760:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"id":2849,"initialValue":{"baseExpression":{"id":2846,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"3778:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2848,"indexExpression":{"hexValue":"30","id":2847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:15"},{"body":{"id":2880,"nodeType":"Block","src":"3842:179:15","statements":[{"assignments":[2863],"declarations":[{"constant":false,"id":2863,"mutability":"mutable","name":"current","nameLocation":"3863:7:15","nodeType":"VariableDeclaration","scope":2880,"src":"3856:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2862,"nodeType":"UserDefinedTypeName","pathNode":{"id":2861,"name":"IERC20","nameLocations":["3856:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3856:6:15"},"referencedDeclaration":3290,"src":"3856:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"id":2867,"initialValue":{"baseExpression":{"id":2864,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"3873:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2866,"indexExpression":{"id":2865,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2851,"src":"3880:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:15"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"id":2870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2868,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2845,"src":"3901:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2869,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"3912:7:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"src":"3901:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2875,"nodeType":"IfStatement","src":"3897:81:15","trueBody":{"id":2874,"nodeType":"Block","src":"3921:57:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2871,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2653,"src":"3946:15:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2873,"nodeType":"RevertStatement","src":"3939:24:15"}]}},{"expression":{"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2876,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2845,"src":"3992:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2877,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"4003:7:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"src":"3992:18:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2879,"nodeType":"ExpressionStatement","src":"3992:18:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2854,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2851,"src":"3818:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2855,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"3822:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:15","memberName":"length","nodeType":"MemberAccess","src":"3822:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2881,"initializationExpression":{"assignments":[2851],"declarations":[{"constant":false,"id":2851,"mutability":"mutable","name":"i","nameLocation":"3811:1:15","nodeType":"VariableDeclaration","scope":2881,"src":"3803:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2850,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2853,"initialValue":{"hexValue":"31","id":2852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:15","subExpression":{"id":2858,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2851,"src":"3839:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2860,"nodeType":"ExpressionStatement","src":"3837:3:15"},"nodeType":"ForStatement","src":"3798:223:15"}]},"documentation":{"id":2829,"nodeType":"StructuredDocumentation","src":"3520:95:15","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":2883,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:15","nodeType":"FunctionDefinition","parameters":{"id":2834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2833,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:15","nodeType":"VariableDeclaration","scope":2883,"src":"3648:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2831,"nodeType":"UserDefinedTypeName","pathNode":{"id":2830,"name":"IERC20","nameLocations":["3648:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3648:6:15"},"referencedDeclaration":3290,"src":"3648:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2832,"nodeType":"ArrayTypeName","src":"3648:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:15"},"returnParameters":{"id":2835,"nodeType":"ParameterList","parameters":[],"src":"3686:0:15"},"scope":2936,"src":"3620:407:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2934,"nodeType":"Block","src":"4203:347:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2890,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"4217:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:15","memberName":"length","nodeType":"MemberAccess","src":"4217:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":2892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2896,"nodeType":"IfStatement","src":"4213:55:15","trueBody":{"id":2895,"nodeType":"Block","src":"4237:31:15","statements":[{"functionReturnParameters":2889,"id":2894,"nodeType":"Return","src":"4251:7:15"}]}},{"assignments":[2898],"declarations":[{"constant":false,"id":2898,"mutability":"mutable","name":"previous","nameLocation":"4286:8:15","nodeType":"VariableDeclaration","scope":2934,"src":"4278:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2897,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2902,"initialValue":{"baseExpression":{"id":2899,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"4297:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2901,"indexExpression":{"hexValue":"30","id":2900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:15"},{"body":{"id":2932,"nodeType":"Block","src":"4363:181:15","statements":[{"assignments":[2915],"declarations":[{"constant":false,"id":2915,"mutability":"mutable","name":"current","nameLocation":"4385:7:15","nodeType":"VariableDeclaration","scope":2932,"src":"4377:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2914,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2919,"initialValue":{"baseExpression":{"id":2916,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"4395:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2918,"indexExpression":{"id":2917,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"4403:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2920,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"4424:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2921,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2915,"src":"4435:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2927,"nodeType":"IfStatement","src":"4420:81:15","trueBody":{"id":2926,"nodeType":"Block","src":"4444:57:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2923,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2653,"src":"4469:15:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2925,"nodeType":"RevertStatement","src":"4462:24:15"}]}},{"expression":{"id":2930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2928,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"4515:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2929,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2915,"src":"4526:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2931,"nodeType":"ExpressionStatement","src":"4515:18:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2907,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"4338:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2908,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"4342:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:15","memberName":"length","nodeType":"MemberAccess","src":"4342:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2933,"initializationExpression":{"assignments":[2904],"declarations":[{"constant":false,"id":2904,"mutability":"mutable","name":"i","nameLocation":"4331:1:15","nodeType":"VariableDeclaration","scope":2933,"src":"4323:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2903,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2906,"initialValue":{"hexValue":"31","id":2905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:15","subExpression":{"id":2911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"4360:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2913,"nodeType":"ExpressionStatement","src":"4358:3:15"},"nodeType":"ForStatement","src":"4318:226:15"}]},"documentation":{"id":2884,"nodeType":"StructuredDocumentation","src":"4033:96:15","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":2935,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:15","nodeType":"FunctionDefinition","parameters":{"id":2888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2887,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:15","nodeType":"VariableDeclaration","scope":2935,"src":"4163:24:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2885,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2886,"nodeType":"ArrayTypeName","src":"4163:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:15"},"returnParameters":{"id":2889,"nodeType":"ParameterList","parameters":[],"src":"4203:0:15"},"scope":2936,"src":"4134:416:15","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2937,"src":"202:4350:15","usedErrors":[2644,2647,2650,2653],"usedEvents":[]}],"src":"46:4507:15"},"id":15},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"Authentication":[2603],"IAuthorizer":[218],"IVault":[763],"SingletonAuthentication":[3042]},"id":3043,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2938,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":2940,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3043,"sourceUnit":219,"src":"72:91:16","symbolAliases":[{"foreign":{"id":2939,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"81:11:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":2942,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3043,"sourceUnit":764,"src":"164:81:16","symbolAliases":[{"foreign":{"id":2941,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"173:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":2944,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3043,"sourceUnit":2604,"src":"247:103:16","symbolAliases":[{"foreign":{"id":2943,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2603,"src":"256:14:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2946,"name":"Authentication","nameLocations":["772:14:16"],"nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"772:14:16"},"id":2947,"nodeType":"InheritanceSpecifier","src":"772:14:16"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2945,"nodeType":"StructuredDocumentation","src":"352:374:16","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":3042,"linearizedBaseContracts":[3042,2603,14],"name":"SingletonAuthentication","nameLocation":"745:23:16","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2950,"mutability":"immutable","name":"_vault","nameLocation":"818:6:16","nodeType":"VariableDeclaration","scope":3042,"src":"793:31:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":2949,"nodeType":"UserDefinedTypeName","pathNode":{"id":2948,"name":"IVault","nameLocations":["793:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"793:6:16"},"referencedDeclaration":763,"src":"793:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":2975,"nodeType":"Block","src":"988:31:16","statements":[{"expression":{"id":2973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2971,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2950,"src":"998:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2972,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"1007:5:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"src":"998:14:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"id":2974,"nodeType":"ExpressionStatement","src":"998:14:16"}]},"id":2976,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":2964,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"978:4:16","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}],"id":2963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"970:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2962,"name":"address","nodeType":"ElementaryTypeName","src":"970:7:16","typeDescriptions":{}}},"id":2965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"962:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":2960,"name":"uint160","nodeType":"ElementaryTypeName","src":"962:7:16","typeDescriptions":{}}},"id":2966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"962:22:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":2959,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"954:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2958,"name":"uint256","nodeType":"ElementaryTypeName","src":"954:7:16","typeDescriptions":{}}},"id":2967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"954:31:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2957,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"946:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2956,"name":"bytes32","nodeType":"ElementaryTypeName","src":"946:7:16","typeDescriptions":{}}},"id":2968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"946:40:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2969,"kind":"baseConstructorSpecifier","modifierName":{"id":2955,"name":"Authentication","nameLocations":["931:14:16"],"nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"931:14:16"},"nodeType":"ModifierInvocation","src":"931:56:16"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2953,"mutability":"mutable","name":"vault","nameLocation":"924:5:16","nodeType":"VariableDeclaration","scope":2976,"src":"917:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":2952,"nodeType":"UserDefinedTypeName","pathNode":{"id":2951,"name":"IVault","nameLocations":["917:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"917:6:16"},"referencedDeclaration":763,"src":"917:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"916:14:16"},"returnParameters":{"id":2970,"nodeType":"ParameterList","parameters":[],"src":"988:0:16"},"scope":3042,"src":"905:114:16","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2985,"nodeType":"Block","src":"1199:30:16","statements":[{"expression":{"id":2983,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2950,"src":"1216:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"functionReturnParameters":2982,"id":2984,"nodeType":"Return","src":"1209:13:16"}]},"documentation":{"id":2977,"nodeType":"StructuredDocumentation","src":"1025:120:16","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":2986,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1159:8:16","nodeType":"FunctionDefinition","parameters":{"id":2978,"nodeType":"ParameterList","parameters":[],"src":"1167:2:16"},"returnParameters":{"id":2982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2986,"src":"1191:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":2980,"nodeType":"UserDefinedTypeName","pathNode":{"id":2979,"name":"IVault","nameLocations":["1191:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"1191:6:16"},"referencedDeclaration":763,"src":"1191:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1190:8:16"},"scope":3042,"src":"1150:79:16","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2998,"nodeType":"Block","src":"1425:50:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2993,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2986,"src":"1442:8:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$763_$","typeString":"function () view returns (contract IVault)"}},"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:10:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"id":2995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1453:13:16","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2077,"src":"1442:24:16","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$218_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":2996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:26:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"functionReturnParameters":2992,"id":2997,"nodeType":"Return","src":"1435:33:16"}]},"documentation":{"id":2987,"nodeType":"StructuredDocumentation","src":"1235:126:16","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":2999,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1375:13:16","nodeType":"FunctionDefinition","parameters":{"id":2988,"nodeType":"ParameterList","parameters":[],"src":"1388:2:16"},"returnParameters":{"id":2992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2999,"src":"1412:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"},"typeName":{"id":2990,"nodeType":"UserDefinedTypeName","pathNode":{"id":2989,"name":"IAuthorizer","nameLocations":["1412:11:16"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"1412:11:16"},"referencedDeclaration":218,"src":"1412:11:16","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1411:13:16"},"scope":3042,"src":"1366:109:16","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[2602],"body":{"id":3020,"nodeType":"Block","src":"1575:84:16","statements":[{"expression":{"arguments":[{"id":3012,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3001,"src":"1619:8:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3013,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"1629:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":3016,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1646:4:16","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}],"id":3015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1638:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3014,"name":"address","nodeType":"ElementaryTypeName","src":"1638:7:16","typeDescriptions":{}}},"id":3017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1638:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3009,"name":"getAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2999,"src":"1592:13:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$218_$","typeString":"function () view returns (contract IAuthorizer)"}},"id":3010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1592:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"id":3011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1608:10:16","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":217,"src":"1592:26:16","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":3018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1592:60:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3008,"id":3019,"nodeType":"Return","src":"1585:67:16"}]},"id":3021,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1490:11:16","nodeType":"FunctionDefinition","overrides":{"id":3005,"nodeType":"OverrideSpecifier","overrides":[],"src":"1551:8:16"},"parameters":{"id":3004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3001,"mutability":"mutable","name":"actionId","nameLocation":"1510:8:16","nodeType":"VariableDeclaration","scope":3021,"src":"1502:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3000,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1502:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3003,"mutability":"mutable","name":"account","nameLocation":"1528:7:16","nodeType":"VariableDeclaration","scope":3021,"src":"1520:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3002,"name":"address","nodeType":"ElementaryTypeName","src":"1520:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1501:35:16"},"returnParameters":{"id":3008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3021,"src":"1569:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3006,"name":"bool","nodeType":"ElementaryTypeName","src":"1569:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1568:6:16"},"scope":3042,"src":"1481:178:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3040,"nodeType":"Block","src":"1765:76:16","statements":[{"expression":{"arguments":[{"id":3035,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3023,"src":"1809:8:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3036,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3025,"src":"1819:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3037,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3027,"src":"1828:5:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3032,"name":"getAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2999,"src":"1782:13:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$218_$","typeString":"function () view returns (contract IAuthorizer)"}},"id":3033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1782:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"id":3034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1798:10:16","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":217,"src":"1782:26:16","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":3038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1782:52:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3031,"id":3039,"nodeType":"Return","src":"1775:59:16"}]},"id":3041,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1674:11:16","nodeType":"FunctionDefinition","parameters":{"id":3028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3023,"mutability":"mutable","name":"actionId","nameLocation":"1694:8:16","nodeType":"VariableDeclaration","scope":3041,"src":"1686:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3022,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1686:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3025,"mutability":"mutable","name":"account","nameLocation":"1712:7:16","nodeType":"VariableDeclaration","scope":3041,"src":"1704:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3024,"name":"address","nodeType":"ElementaryTypeName","src":"1704:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3027,"mutability":"mutable","name":"where","nameLocation":"1729:5:16","nodeType":"VariableDeclaration","scope":3041,"src":"1721:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3026,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1685:50:16"},"returnParameters":{"id":3031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3041,"src":"1759:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3029,"name":"bool","nodeType":"ElementaryTypeName","src":"1759:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1758:6:16"},"scope":3042,"src":"1665:176:16","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3043,"src":"727:1116:16","usedErrors":[5],"usedEvents":[]}],"src":"46:1798:16"},"id":16},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[3290],"IERC20Metadata":[3316],"IERC4626":[3212]},"id":3213,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3044,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:17"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":3046,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3213,"sourceUnit":3291,"src":"133:49:17","symbolAliases":[{"foreign":{"id":3045,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"141:6:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":3048,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3213,"sourceUnit":3317,"src":"183:76:17","symbolAliases":[{"foreign":{"id":3047,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3316,"src":"191:14:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3050,"name":"IERC20","nameLocations":["420:6:17"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"420:6:17"},"id":3051,"nodeType":"InheritanceSpecifier","src":"420:6:17"},{"baseName":{"id":3052,"name":"IERC20Metadata","nameLocations":["428:14:17"],"nodeType":"IdentifierPath","referencedDeclaration":3316,"src":"428:14:17"},"id":3053,"nodeType":"InheritanceSpecifier","src":"428:14:17"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":3049,"nodeType":"StructuredDocumentation","src":"261:136:17","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":3212,"linearizedBaseContracts":[3212,3316,3290],"name":"IERC4626","nameLocation":"408:8:17","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":3063,"name":"Deposit","nameLocation":"455:7:17","nodeType":"EventDefinition","parameters":{"id":3062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3055,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:17","nodeType":"VariableDeclaration","scope":3063,"src":"463:22:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3054,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3057,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:17","nodeType":"VariableDeclaration","scope":3063,"src":"487:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3056,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3059,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:17","nodeType":"VariableDeclaration","scope":3063,"src":"510:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3058,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3061,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:17","nodeType":"VariableDeclaration","scope":3063,"src":"526:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3060,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:17"},"src":"449:93:17"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":3075,"name":"Withdraw","nameLocation":"554:8:17","nodeType":"EventDefinition","parameters":{"id":3074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3065,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:17","nodeType":"VariableDeclaration","scope":3075,"src":"572:22:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3064,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3067,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:17","nodeType":"VariableDeclaration","scope":3075,"src":"604:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3066,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3069,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:17","nodeType":"VariableDeclaration","scope":3075,"src":"638:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3068,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3071,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:17","nodeType":"VariableDeclaration","scope":3075,"src":"669:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3070,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3073,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:17","nodeType":"VariableDeclaration","scope":3075,"src":"693:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3072,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:17"},"src":"548:166:17"},{"documentation":{"id":3076,"nodeType":"StructuredDocumentation","src":"720:207:17","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":3081,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:17","nodeType":"FunctionDefinition","parameters":{"id":3077,"nodeType":"ParameterList","parameters":[],"src":"946:2:17"},"returnParameters":{"id":3080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3079,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:17","nodeType":"VariableDeclaration","scope":3081,"src":"972:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3078,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:17"},"scope":3212,"src":"932:67:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3082,"nodeType":"StructuredDocumentation","src":"1005:286:17","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":3087,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:17","nodeType":"FunctionDefinition","parameters":{"id":3083,"nodeType":"ParameterList","parameters":[],"src":"1316:2:17"},"returnParameters":{"id":3086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3085,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:17","nodeType":"VariableDeclaration","scope":3087,"src":"1342:26:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3084,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:17"},"scope":3212,"src":"1296:74:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3088,"nodeType":"StructuredDocumentation","src":"1376:720:17","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":3095,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:17","nodeType":"FunctionDefinition","parameters":{"id":3091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3090,"mutability":"mutable","name":"assets","nameLocation":"2134:6:17","nodeType":"VariableDeclaration","scope":3095,"src":"2126:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3089,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:17"},"returnParameters":{"id":3094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3093,"mutability":"mutable","name":"shares","nameLocation":"2173:6:17","nodeType":"VariableDeclaration","scope":3095,"src":"2165:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3092,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:17"},"scope":3212,"src":"2101:80:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3096,"nodeType":"StructuredDocumentation","src":"2187:720:17","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":3103,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:17","nodeType":"FunctionDefinition","parameters":{"id":3099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3098,"mutability":"mutable","name":"shares","nameLocation":"2945:6:17","nodeType":"VariableDeclaration","scope":3103,"src":"2937:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3097,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:17"},"returnParameters":{"id":3102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3101,"mutability":"mutable","name":"assets","nameLocation":"2984:6:17","nodeType":"VariableDeclaration","scope":3103,"src":"2976:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3100,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:17"},"scope":3212,"src":"2912:80:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3104,"nodeType":"StructuredDocumentation","src":"2998:386:17","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":3111,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:17","nodeType":"FunctionDefinition","parameters":{"id":3107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3106,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:17","nodeType":"VariableDeclaration","scope":3111,"src":"3409:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3105,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:17"},"returnParameters":{"id":3110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3109,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:17","nodeType":"VariableDeclaration","scope":3111,"src":"3450:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3108,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:17"},"scope":3212,"src":"3389:80:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3112,"nodeType":"StructuredDocumentation","src":"3475:1012:17","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":3119,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:17","nodeType":"FunctionDefinition","parameters":{"id":3115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3114,"mutability":"mutable","name":"assets","nameLocation":"4524:6:17","nodeType":"VariableDeclaration","scope":3119,"src":"4516:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3113,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:17"},"returnParameters":{"id":3118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3117,"mutability":"mutable","name":"shares","nameLocation":"4563:6:17","nodeType":"VariableDeclaration","scope":3119,"src":"4555:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3116,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:17"},"scope":3212,"src":"4492:79:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3120,"nodeType":"StructuredDocumentation","src":"4577:651:17","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":3129,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:17","nodeType":"FunctionDefinition","parameters":{"id":3125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3122,"mutability":"mutable","name":"assets","nameLocation":"5258:6:17","nodeType":"VariableDeclaration","scope":3129,"src":"5250:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3121,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3124,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:17","nodeType":"VariableDeclaration","scope":3129,"src":"5266:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3123,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:17"},"returnParameters":{"id":3128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3127,"mutability":"mutable","name":"shares","nameLocation":"5310:6:17","nodeType":"VariableDeclaration","scope":3129,"src":"5302:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3126,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:17"},"scope":3212,"src":"5233:85:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3130,"nodeType":"StructuredDocumentation","src":"5324:341:17","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":3137,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:17","nodeType":"FunctionDefinition","parameters":{"id":3133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3132,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:17","nodeType":"VariableDeclaration","scope":3137,"src":"5687:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3131,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:17"},"returnParameters":{"id":3136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3135,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:17","nodeType":"VariableDeclaration","scope":3137,"src":"5728:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3134,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:17"},"scope":3212,"src":"5670:77:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3138,"nodeType":"StructuredDocumentation","src":"5753:984:17","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":3145,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:17","nodeType":"FunctionDefinition","parameters":{"id":3141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3140,"mutability":"mutable","name":"shares","nameLocation":"6771:6:17","nodeType":"VariableDeclaration","scope":3145,"src":"6763:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3139,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:17"},"returnParameters":{"id":3144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3143,"mutability":"mutable","name":"assets","nameLocation":"6810:6:17","nodeType":"VariableDeclaration","scope":3145,"src":"6802:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3142,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:17"},"scope":3212,"src":"6742:76:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3146,"nodeType":"StructuredDocumentation","src":"6824:642:17","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":3155,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:17","nodeType":"FunctionDefinition","parameters":{"id":3151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3148,"mutability":"mutable","name":"shares","nameLocation":"7493:6:17","nodeType":"VariableDeclaration","scope":3155,"src":"7485:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3147,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3150,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:17","nodeType":"VariableDeclaration","scope":3155,"src":"7501:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3149,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:17"},"returnParameters":{"id":3154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3153,"mutability":"mutable","name":"assets","nameLocation":"7545:6:17","nodeType":"VariableDeclaration","scope":3155,"src":"7537:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3152,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:17"},"scope":3212,"src":"7471:82:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3156,"nodeType":"StructuredDocumentation","src":"7559:293:17","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":3163,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:17","nodeType":"FunctionDefinition","parameters":{"id":3159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3158,"mutability":"mutable","name":"owner","nameLocation":"7886:5:17","nodeType":"VariableDeclaration","scope":3163,"src":"7878:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3157,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:17"},"returnParameters":{"id":3162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3161,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:17","nodeType":"VariableDeclaration","scope":3163,"src":"7916:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3160,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:17"},"scope":3212,"src":"7857:78:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3164,"nodeType":"StructuredDocumentation","src":"7941:1034:17","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":3171,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:17","nodeType":"FunctionDefinition","parameters":{"id":3167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3166,"mutability":"mutable","name":"assets","nameLocation":"9013:6:17","nodeType":"VariableDeclaration","scope":3171,"src":"9005:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3165,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:17"},"returnParameters":{"id":3170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3169,"mutability":"mutable","name":"shares","nameLocation":"9052:6:17","nodeType":"VariableDeclaration","scope":3171,"src":"9044:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3168,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:17"},"scope":3212,"src":"8980:80:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3172,"nodeType":"StructuredDocumentation","src":"9066:670:17","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":3183,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:17","nodeType":"FunctionDefinition","parameters":{"id":3179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3174,"mutability":"mutable","name":"assets","nameLocation":"9767:6:17","nodeType":"VariableDeclaration","scope":3183,"src":"9759:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3173,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3176,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:17","nodeType":"VariableDeclaration","scope":3183,"src":"9775:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3175,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3178,"mutability":"mutable","name":"owner","nameLocation":"9801:5:17","nodeType":"VariableDeclaration","scope":3183,"src":"9793:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3177,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:17"},"returnParameters":{"id":3182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3181,"mutability":"mutable","name":"shares","nameLocation":"9834:6:17","nodeType":"VariableDeclaration","scope":3183,"src":"9826:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3180,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:17"},"scope":3212,"src":"9741:101:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3184,"nodeType":"StructuredDocumentation","src":"9848:381:17","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":3191,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:17","nodeType":"FunctionDefinition","parameters":{"id":3187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3186,"mutability":"mutable","name":"owner","nameLocation":"10261:5:17","nodeType":"VariableDeclaration","scope":3191,"src":"10253:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3185,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:17"},"returnParameters":{"id":3190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3189,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:17","nodeType":"VariableDeclaration","scope":3191,"src":"10291:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3188,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:17"},"scope":3212,"src":"10234:76:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3192,"nodeType":"StructuredDocumentation","src":"10316:1010:17","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":3199,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:17","nodeType":"FunctionDefinition","parameters":{"id":3195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3194,"mutability":"mutable","name":"shares","nameLocation":"11362:6:17","nodeType":"VariableDeclaration","scope":3199,"src":"11354:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3193,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:17"},"returnParameters":{"id":3198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3197,"mutability":"mutable","name":"assets","nameLocation":"11401:6:17","nodeType":"VariableDeclaration","scope":3199,"src":"11393:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3196,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:17"},"scope":3212,"src":"11331:78:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3200,"nodeType":"StructuredDocumentation","src":"11415:661:17","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":3211,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:17","nodeType":"FunctionDefinition","parameters":{"id":3207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3202,"mutability":"mutable","name":"shares","nameLocation":"12105:6:17","nodeType":"VariableDeclaration","scope":3211,"src":"12097:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3201,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3204,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:17","nodeType":"VariableDeclaration","scope":3211,"src":"12113:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3203,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3206,"mutability":"mutable","name":"owner","nameLocation":"12139:5:17","nodeType":"VariableDeclaration","scope":3211,"src":"12131:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3205,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:17"},"returnParameters":{"id":3210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3209,"mutability":"mutable","name":"assets","nameLocation":"12172:6:17","nodeType":"VariableDeclaration","scope":3211,"src":"12164:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3208,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:17"},"scope":3212,"src":"12081:99:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3213,"src":"398:11784:17","usedErrors":[],"usedEvents":[3063,3075,3224,3233]}],"src":"107:12076:17"},"id":17},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[3290]},"id":3291,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3214,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:18"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":3215,"nodeType":"StructuredDocumentation","src":"132:70:18","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":3290,"linearizedBaseContracts":[3290],"name":"IERC20","nameLocation":"213:6:18","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3216,"nodeType":"StructuredDocumentation","src":"226:158:18","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":3224,"name":"Transfer","nameLocation":"395:8:18","nodeType":"EventDefinition","parameters":{"id":3223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3218,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:18","nodeType":"VariableDeclaration","scope":3224,"src":"404:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3217,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3220,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:18","nodeType":"VariableDeclaration","scope":3224,"src":"426:18:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3219,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3222,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:18","nodeType":"VariableDeclaration","scope":3224,"src":"446:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3221,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:18"},"src":"389:72:18"},{"anonymous":false,"documentation":{"id":3225,"nodeType":"StructuredDocumentation","src":"467:148:18","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":3233,"name":"Approval","nameLocation":"626:8:18","nodeType":"EventDefinition","parameters":{"id":3232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3227,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:18","nodeType":"VariableDeclaration","scope":3233,"src":"635:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3226,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3229,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:18","nodeType":"VariableDeclaration","scope":3233,"src":"658:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3228,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3231,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:18","nodeType":"VariableDeclaration","scope":3233,"src":"683:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3230,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:18"},"src":"620:78:18"},{"documentation":{"id":3234,"nodeType":"StructuredDocumentation","src":"704:65:18","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":3239,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:18","nodeType":"FunctionDefinition","parameters":{"id":3235,"nodeType":"ParameterList","parameters":[],"src":"794:2:18"},"returnParameters":{"id":3238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3239,"src":"820:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3236,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:18"},"scope":3290,"src":"774:55:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3240,"nodeType":"StructuredDocumentation","src":"835:71:18","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":3247,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:18","nodeType":"FunctionDefinition","parameters":{"id":3243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3242,"mutability":"mutable","name":"account","nameLocation":"938:7:18","nodeType":"VariableDeclaration","scope":3247,"src":"930:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3241,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:18"},"returnParameters":{"id":3246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3245,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3247,"src":"970:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3244,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:18"},"scope":3290,"src":"911:68:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3248,"nodeType":"StructuredDocumentation","src":"985:213:18","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":3257,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:18","nodeType":"FunctionDefinition","parameters":{"id":3253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3250,"mutability":"mutable","name":"to","nameLocation":"1229:2:18","nodeType":"VariableDeclaration","scope":3257,"src":"1221:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3249,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3252,"mutability":"mutable","name":"value","nameLocation":"1241:5:18","nodeType":"VariableDeclaration","scope":3257,"src":"1233:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3251,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:18"},"returnParameters":{"id":3256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3255,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3257,"src":"1266:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3254,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:18"},"scope":3290,"src":"1203:69:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3258,"nodeType":"StructuredDocumentation","src":"1278:264:18","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":3267,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:18","nodeType":"FunctionDefinition","parameters":{"id":3263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3260,"mutability":"mutable","name":"owner","nameLocation":"1574:5:18","nodeType":"VariableDeclaration","scope":3267,"src":"1566:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3259,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3262,"mutability":"mutable","name":"spender","nameLocation":"1589:7:18","nodeType":"VariableDeclaration","scope":3267,"src":"1581:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3261,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:18"},"returnParameters":{"id":3266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3265,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3267,"src":"1621:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3264,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:18"},"scope":3290,"src":"1547:83:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3268,"nodeType":"StructuredDocumentation","src":"1636:667:18","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":3277,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:18","nodeType":"FunctionDefinition","parameters":{"id":3273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3270,"mutability":"mutable","name":"spender","nameLocation":"2333:7:18","nodeType":"VariableDeclaration","scope":3277,"src":"2325:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3269,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3272,"mutability":"mutable","name":"value","nameLocation":"2350:5:18","nodeType":"VariableDeclaration","scope":3277,"src":"2342:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3271,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:18"},"returnParameters":{"id":3276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3277,"src":"2375:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3274,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:18"},"scope":3290,"src":"2308:73:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3278,"nodeType":"StructuredDocumentation","src":"2387:297:18","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":3289,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:18","nodeType":"FunctionDefinition","parameters":{"id":3285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3280,"mutability":"mutable","name":"from","nameLocation":"2719:4:18","nodeType":"VariableDeclaration","scope":3289,"src":"2711:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3279,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3282,"mutability":"mutable","name":"to","nameLocation":"2733:2:18","nodeType":"VariableDeclaration","scope":3289,"src":"2725:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3281,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3284,"mutability":"mutable","name":"value","nameLocation":"2745:5:18","nodeType":"VariableDeclaration","scope":3289,"src":"2737:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3283,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:18"},"returnParameters":{"id":3288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3287,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3289,"src":"2770:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3286,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:18"},"scope":3290,"src":"2689:87:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3291,"src":"203:2575:18","usedErrors":[],"usedEvents":[3224,3233]}],"src":"106:2673:18"},"id":18},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[3290],"IERC20Metadata":[3316]},"id":3317,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3292,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:19"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":3294,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3317,"sourceUnit":3291,"src":"151:37:19","symbolAliases":[{"foreign":{"id":3293,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"159:6:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3296,"name":"IERC20","nameLocations":["305:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"305:6:19"},"id":3297,"nodeType":"InheritanceSpecifier","src":"305:6:19"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":3295,"nodeType":"StructuredDocumentation","src":"190:86:19","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":3316,"linearizedBaseContracts":[3316,3290],"name":"IERC20Metadata","nameLocation":"287:14:19","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3298,"nodeType":"StructuredDocumentation","src":"318:54:19","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":3303,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:19","nodeType":"FunctionDefinition","parameters":{"id":3299,"nodeType":"ParameterList","parameters":[],"src":"390:2:19"},"returnParameters":{"id":3302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3301,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3303,"src":"416:13:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3300,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:19"},"scope":3316,"src":"377:54:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3304,"nodeType":"StructuredDocumentation","src":"437:56:19","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":3309,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:19","nodeType":"FunctionDefinition","parameters":{"id":3305,"nodeType":"ParameterList","parameters":[],"src":"513:2:19"},"returnParameters":{"id":3308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3309,"src":"539:13:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3306,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:19"},"scope":3316,"src":"498:56:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3310,"nodeType":"StructuredDocumentation","src":"560:65:19","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":3315,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:19","nodeType":"FunctionDefinition","parameters":{"id":3311,"nodeType":"ParameterList","parameters":[],"src":"647:2:19"},"returnParameters":{"id":3314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3313,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3315,"src":"673:5:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3312,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:19","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:19"},"scope":3316,"src":"630:50:19","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3317,"src":"277:405:19","usedErrors":[],"usedEvents":[3224,3233]}],"src":"125:558:19"},"id":19},"contracts/BalancerContractRegistryInitializer.sol":{"ast":{"absolutePath":"contracts/BalancerContractRegistryInitializer.sol","exportedSymbols":{"BalancerContractRegistryInitializer":[3648],"ContractType":[33],"IAuthentication":[14],"IBalancerContractRegistry":[202],"IBasicAuthorizer":[3681],"IVault":[763],"InputHelpers":[2936],"SingletonAuthentication":[3042]},"id":3649,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3318,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":3320,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":15,"src":"72:116:20","symbolAliases":[{"foreign":{"id":3319,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":3323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":203,"src":"189:152:20","symbolAliases":[{"foreign":{"id":3321,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"202:25:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":3322,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"233:12:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":3325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":764,"src":"342:81:20","symbolAliases":[{"foreign":{"id":3324,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"351:6:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":3327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":3043,"src":"425:104:20","symbolAliases":[{"foreign":{"id":3326,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"434:23:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":3329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":2937,"src":"530:99:20","symbolAliases":[{"foreign":{"id":3328,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2936,"src":"539:12:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/IBasicAuthorizer.sol","file":"./IBasicAuthorizer.sol","id":3331,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":3682,"src":"631:58:20","symbolAliases":[{"foreign":{"id":3330,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3681,"src":"640:16:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BalancerContractRegistryInitializer","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":3648,"linearizedBaseContracts":[3648],"name":"BalancerContractRegistryInitializer","nameLocation":"761:35:20","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"2623a2d0","id":3334,"mutability":"immutable","name":"balancerContractRegistry","nameLocation":"846:24:20","nodeType":"VariableDeclaration","scope":3648,"src":"803:67:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":3333,"nodeType":"UserDefinedTypeName","pathNode":{"id":3332,"name":"IBalancerContractRegistry","nameLocations":["803:25:20"],"nodeType":"IdentifierPath","referencedDeclaration":202,"src":"803:25:20"},"referencedDeclaration":202,"src":"803:25:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"visibility":"public"},{"constant":false,"id":3337,"mutability":"immutable","name":"_authorizer","nameLocation":"976:11:20","nodeType":"VariableDeclaration","scope":3648,"src":"940:47:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"},"typeName":{"id":3336,"nodeType":"UserDefinedTypeName","pathNode":{"id":3335,"name":"IBasicAuthorizer","nameLocations":["940:16:20"],"nodeType":"IdentifierPath","referencedDeclaration":3681,"src":"940:16:20"},"referencedDeclaration":3681,"src":"940:16:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"visibility":"internal"},{"constant":false,"id":3339,"mutability":"mutable","name":"_initialized","nameLocation":"1054:12:20","nodeType":"VariableDeclaration","scope":3648,"src":"1041:25:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3338,"name":"bool","nodeType":"ElementaryTypeName","src":"1041:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"id":3342,"mutability":"mutable","name":"routerNames","nameLocation":"1090:11:20","nodeType":"VariableDeclaration","scope":3648,"src":"1073:28:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":3340,"name":"string","nodeType":"ElementaryTypeName","src":"1073:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3341,"nodeType":"ArrayTypeName","src":"1073:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":3345,"mutability":"mutable","name":"routerAddresses","nameLocation":"1125:15:20","nodeType":"VariableDeclaration","scope":3648,"src":"1107:33:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":3343,"name":"address","nodeType":"ElementaryTypeName","src":"1107:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3344,"nodeType":"ArrayTypeName","src":"1107:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":3348,"mutability":"mutable","name":"poolFactoryNames","nameLocation":"1164:16:20","nodeType":"VariableDeclaration","scope":3648,"src":"1147:33:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":3346,"name":"string","nodeType":"ElementaryTypeName","src":"1147:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3347,"nodeType":"ArrayTypeName","src":"1147:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":3351,"mutability":"mutable","name":"poolFactoryAddresses","nameLocation":"1204:20:20","nodeType":"VariableDeclaration","scope":3648,"src":"1186:38:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":3349,"name":"address","nodeType":"ElementaryTypeName","src":"1186:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3350,"nodeType":"ArrayTypeName","src":"1186:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":3354,"mutability":"mutable","name":"aliasNames","nameLocation":"1248:10:20","nodeType":"VariableDeclaration","scope":3648,"src":"1231:27:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":3352,"name":"string","nodeType":"ElementaryTypeName","src":"1231:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3353,"nodeType":"ArrayTypeName","src":"1231:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":3357,"mutability":"mutable","name":"aliasAddresses","nameLocation":"1282:14:20","nodeType":"VariableDeclaration","scope":3648,"src":"1264:32:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":3355,"name":"address","nodeType":"ElementaryTypeName","src":"1264:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3356,"nodeType":"ArrayTypeName","src":"1264:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"documentation":{"id":3358,"nodeType":"StructuredDocumentation","src":"1303:53:20","text":"@notice The initialization can only be done once."},"errorSelector":"0dc149f0","id":3360,"name":"AlreadyInitialized","nameLocation":"1367:18:20","nodeType":"ErrorDefinition","parameters":{"id":3359,"nodeType":"ParameterList","parameters":[],"src":"1385:2:20"},"src":"1361:27:20"},{"documentation":{"id":3361,"nodeType":"StructuredDocumentation","src":"1394:103:20","text":"@notice The Vault passed in as a sanity check doesn't match the Vault associated with the registry."},"errorSelector":"c1faacc5","id":3363,"name":"VaultMismatch","nameLocation":"1508:13:20","nodeType":"ErrorDefinition","parameters":{"id":3362,"nodeType":"ParameterList","parameters":[],"src":"1521:2:20"},"src":"1502:22:20"},{"body":{"id":3476,"nodeType":"Block","src":"1882:958:20","statements":[{"expression":{"arguments":[{"expression":{"id":3393,"name":"_routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3372,"src":"1928:12:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":3394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1941:6:20","memberName":"length","nodeType":"MemberAccess","src":"1928:19:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3395,"name":"_routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3375,"src":"1949:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1966:6:20","memberName":"length","nodeType":"MemberAccess","src":"1949:23:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3390,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2936,"src":"1892:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2936_$","typeString":"type(library InputHelpers)"}},"id":3392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1905:22:20","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2669,"src":"1892:35:20","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":3397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1892:81:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3398,"nodeType":"ExpressionStatement","src":"1892:81:20"},{"expression":{"arguments":[{"expression":{"id":3402,"name":"_poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3378,"src":"2019:17:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":3403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2037:6:20","memberName":"length","nodeType":"MemberAccess","src":"2019:24:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3404,"name":"_poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3381,"src":"2045:21:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2067:6:20","memberName":"length","nodeType":"MemberAccess","src":"2045:28:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3399,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2936,"src":"1983:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2936_$","typeString":"type(library InputHelpers)"}},"id":3401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1996:22:20","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2669,"src":"1983:35:20","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":3406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1983:91:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3407,"nodeType":"ExpressionStatement","src":"1983:91:20"},{"expression":{"arguments":[{"expression":{"id":3411,"name":"_aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3384,"src":"2120:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":3412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2132:6:20","memberName":"length","nodeType":"MemberAccess","src":"2120:18:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3413,"name":"_aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"2140:15:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2156:6:20","memberName":"length","nodeType":"MemberAccess","src":"2140:22:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3408,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2936,"src":"2084:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2936_$","typeString":"type(library InputHelpers)"}},"id":3410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2097:22:20","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2669,"src":"2084:35:20","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2084:79:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3416,"nodeType":"ExpressionStatement","src":"2084:79:20"},{"assignments":[3419],"declarations":[{"constant":false,"id":3419,"mutability":"mutable","name":"registryVault","nameLocation":"2270:13:20","nodeType":"VariableDeclaration","scope":3476,"src":"2263:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":3418,"nodeType":"UserDefinedTypeName","pathNode":{"id":3417,"name":"IVault","nameLocations":["2263:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"2263:6:20"},"referencedDeclaration":763,"src":"2263:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"id":3428,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":3423,"name":"_balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"2318:25:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}],"id":3422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2310:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3421,"name":"address","nodeType":"ElementaryTypeName","src":"2310:7:20","typeDescriptions":{}}},"id":3424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2310:34:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3420,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"2286:23:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SingletonAuthentication_$3042_$","typeString":"type(contract SingletonAuthentication)"}},"id":3425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2286:59:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}},"id":3426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2346:8:20","memberName":"getVault","nodeType":"MemberAccess","referencedDeclaration":2986,"src":"2286:68:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$763_$","typeString":"function () view external returns (contract IVault)"}},"id":3427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2286:70:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"nodeType":"VariableDeclarationStatement","src":"2263:93:20"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3429,"name":"registryVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3419,"src":"2370:13:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3430,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"2387:5:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"src":"2370:22:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3436,"nodeType":"IfStatement","src":"2366:75:20","trueBody":{"id":3435,"nodeType":"Block","src":"2394:47:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3432,"name":"VaultMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3363,"src":"2415:13:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:15:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3434,"nodeType":"RevertStatement","src":"2408:22:20"}]}},{"expression":{"id":3439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3437,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"2451:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3438,"name":"_balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"2478:25:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"src":"2451:52:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"id":3440,"nodeType":"ExpressionStatement","src":"2451:52:20"},{"expression":{"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3441,"name":"routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3342,"src":"2514:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3442,"name":"_routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3372,"src":"2528:12:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2514:26:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3444,"nodeType":"ExpressionStatement","src":"2514:26:20"},{"expression":{"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3445,"name":"routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"2550:15:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3446,"name":"_routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3375,"src":"2568:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2550:34:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3448,"nodeType":"ExpressionStatement","src":"2550:34:20"},{"expression":{"id":3451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3449,"name":"poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"2594:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3450,"name":"_poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3378,"src":"2613:17:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2594:36:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3452,"nodeType":"ExpressionStatement","src":"2594:36:20"},{"expression":{"id":3455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3453,"name":"poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3351,"src":"2640:20:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3454,"name":"_poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3381,"src":"2663:21:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2640:44:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3456,"nodeType":"ExpressionStatement","src":"2640:44:20"},{"expression":{"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3457,"name":"aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"2694:10:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3458,"name":"_aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3384,"src":"2707:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2694:24:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3460,"nodeType":"ExpressionStatement","src":"2694:24:20"},{"expression":{"id":3463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3461,"name":"aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"2728:14:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3462,"name":"_aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"2745:15:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2728:32:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3464,"nodeType":"ExpressionStatement","src":"2728:32:20"},{"expression":{"id":3474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3465,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"2771:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3469,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"2810:5:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"id":3470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2816:13:20","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2077,"src":"2810:19:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$218_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":3471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2810:21:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}],"id":3468,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2802:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3467,"name":"address","nodeType":"ElementaryTypeName","src":"2802:7:20","typeDescriptions":{}}},"id":3472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2802:30:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3466,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3681,"src":"2785:16:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasicAuthorizer_$3681_$","typeString":"type(contract IBasicAuthorizer)"}},"id":3473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2785:48:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"src":"2771:62:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3475,"nodeType":"ExpressionStatement","src":"2771:62:20"}]},"id":3477,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3366,"mutability":"mutable","name":"vault","nameLocation":"1558:5:20","nodeType":"VariableDeclaration","scope":3477,"src":"1551:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":3365,"nodeType":"UserDefinedTypeName","pathNode":{"id":3364,"name":"IVault","nameLocations":["1551:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"1551:6:20"},"referencedDeclaration":763,"src":"1551:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":3369,"mutability":"mutable","name":"_balancerContractRegistry","nameLocation":"1599:25:20","nodeType":"VariableDeclaration","scope":3477,"src":"1573:51:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":3368,"nodeType":"UserDefinedTypeName","pathNode":{"id":3367,"name":"IBalancerContractRegistry","nameLocations":["1573:25:20"],"nodeType":"IdentifierPath","referencedDeclaration":202,"src":"1573:25:20"},"referencedDeclaration":202,"src":"1573:25:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"},{"constant":false,"id":3372,"mutability":"mutable","name":"_routerNames","nameLocation":"1650:12:20","nodeType":"VariableDeclaration","scope":3477,"src":"1634:28:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":3370,"name":"string","nodeType":"ElementaryTypeName","src":"1634:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3371,"nodeType":"ArrayTypeName","src":"1634:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":3375,"mutability":"mutable","name":"_routerAddresses","nameLocation":"1689:16:20","nodeType":"VariableDeclaration","scope":3477,"src":"1672:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3373,"name":"address","nodeType":"ElementaryTypeName","src":"1672:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3374,"nodeType":"ArrayTypeName","src":"1672:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3378,"mutability":"mutable","name":"_poolFactoryNames","nameLocation":"1731:17:20","nodeType":"VariableDeclaration","scope":3477,"src":"1715:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":3376,"name":"string","nodeType":"ElementaryTypeName","src":"1715:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3377,"nodeType":"ArrayTypeName","src":"1715:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":3381,"mutability":"mutable","name":"_poolFactoryAddresses","nameLocation":"1775:21:20","nodeType":"VariableDeclaration","scope":3477,"src":"1758:38:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3379,"name":"address","nodeType":"ElementaryTypeName","src":"1758:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3380,"nodeType":"ArrayTypeName","src":"1758:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3384,"mutability":"mutable","name":"_aliasNames","nameLocation":"1822:11:20","nodeType":"VariableDeclaration","scope":3477,"src":"1806:27:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":3382,"name":"string","nodeType":"ElementaryTypeName","src":"1806:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3383,"nodeType":"ArrayTypeName","src":"1806:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":3387,"mutability":"mutable","name":"_aliasAddresses","nameLocation":"1860:15:20","nodeType":"VariableDeclaration","scope":3477,"src":"1843:32:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3385,"name":"address","nodeType":"ElementaryTypeName","src":"1843:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3386,"nodeType":"ArrayTypeName","src":"1843:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1541:340:20"},"returnParameters":{"id":3389,"nodeType":"ParameterList","parameters":[],"src":"1882:0:20"},"scope":3648,"src":"1530:1310:20","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3646,"nodeType":"Block","src":"2901:1726:20","statements":[{"condition":{"id":3480,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3339,"src":"2974:12:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3485,"nodeType":"IfStatement","src":"2970:70:20","trueBody":{"id":3484,"nodeType":"Block","src":"2988:52:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3481,"name":"AlreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3360,"src":"3009:18:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3009:20:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3483,"nodeType":"RevertStatement","src":"3002:27:20"}]}},{"expression":{"id":3488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3486,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3339,"src":"3050:12:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3065:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3050:19:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3489,"nodeType":"ExpressionStatement","src":"3050:19:20"},{"assignments":[3491],"declarations":[{"constant":false,"id":3491,"mutability":"mutable","name":"registerContractRole","nameLocation":"3156:20:20","nodeType":"VariableDeclaration","scope":3646,"src":"3148:28:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3490,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3148:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3503,"initialValue":{"arguments":[{"expression":{"expression":{"id":3499,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"3255:25:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBalancerContractRegistry_$202_$","typeString":"type(contract IBalancerContractRegistry)"}},"id":3500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3281:24:20","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":140,"src":"3255:50:20","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_enum$_ContractType_$33_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function IBalancerContractRegistry.registerBalancerContract(enum ContractType,string memory,address)"}},"id":3501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3306:8:20","memberName":"selector","nodeType":"MemberAccess","src":"3255:59:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":3495,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"3203:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}],"id":3494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3195:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3493,"name":"address","nodeType":"ElementaryTypeName","src":"3195:7:20","typeDescriptions":{}}},"id":3496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3195:33:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3492,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"3179:15:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$14_$","typeString":"type(contract IAuthentication)"}},"id":3497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3179:50:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$14","typeString":"contract IAuthentication"}},"id":3498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3230:11:20","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":13,"src":"3179:62:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":3502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3179:145:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3148:176:20"},{"assignments":[3505],"declarations":[{"constant":false,"id":3505,"mutability":"mutable","name":"addAliasRole","nameLocation":"3342:12:20","nodeType":"VariableDeclaration","scope":3646,"src":"3334:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3504,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3334:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3517,"initialValue":{"arguments":[{"expression":{"expression":{"id":3513,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"3433:25:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBalancerContractRegistry_$202_$","typeString":"type(contract IBalancerContractRegistry)"}},"id":3514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3459:32:20","memberName":"addOrUpdateBalancerContractAlias","nodeType":"MemberAccess","referencedDeclaration":160,"src":"3433:58:20","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function IBalancerContractRegistry.addOrUpdateBalancerContractAlias(string memory,address)"}},"id":3515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3492:8:20","memberName":"selector","nodeType":"MemberAccess","src":"3433:67:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":3509,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"3381:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}],"id":3508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3373:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3507,"name":"address","nodeType":"ElementaryTypeName","src":"3373:7:20","typeDescriptions":{}}},"id":3510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3373:33:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3506,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"3357:15:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$14_$","typeString":"type(contract IAuthentication)"}},"id":3511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3357:50:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$14","typeString":"contract IAuthentication"}},"id":3512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3408:11:20","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":13,"src":"3357:62:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":3516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3357:153:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3334:176:20"},{"expression":{"arguments":[{"id":3521,"name":"registerContractRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3491,"src":"3543:20:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3524,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3573:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3565:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3522,"name":"address","nodeType":"ElementaryTypeName","src":"3565:7:20","typeDescriptions":{}}},"id":3525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3518,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"3521:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3533:9:20","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":3666,"src":"3521:21:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3521:58:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3527,"nodeType":"ExpressionStatement","src":"3521:58:20"},{"expression":{"arguments":[{"id":3531,"name":"addAliasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"3611:12:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3534,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3633:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3625:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3532,"name":"address","nodeType":"ElementaryTypeName","src":"3625:7:20","typeDescriptions":{}}},"id":3535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3625:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3528,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"3589:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3601:9:20","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":3666,"src":"3589:21:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3589:50:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3537,"nodeType":"ExpressionStatement","src":"3589:50:20"},{"body":{"id":3562,"nodeType":"Block","src":"3723:131:20","statements":[{"expression":{"arguments":[{"expression":{"id":3552,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"3787:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$33_$","typeString":"type(enum ContractType)"}},"id":3553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3800:6:20","memberName":"ROUTER","nodeType":"MemberAccess","referencedDeclaration":30,"src":"3787:19:20","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},{"baseExpression":{"id":3554,"name":"routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3342,"src":"3808:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3556,"indexExpression":{"id":3555,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"3820:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3808:14:20","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":3557,"name":"routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"3824:15:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3559,"indexExpression":{"id":3558,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"3840:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3824:18:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3549,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"3737:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"id":3551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3762:24:20","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":140,"src":"3737:49:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_enum$_ContractType_$33_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address) external"}},"id":3560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3737:106:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3561,"nodeType":"ExpressionStatement","src":"3737:106:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3542,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"3694:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3543,"name":"routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3342,"src":"3698:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3710:6:20","memberName":"length","nodeType":"MemberAccess","src":"3698:18:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3694:22:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3563,"initializationExpression":{"assignments":[3539],"declarations":[{"constant":false,"id":3539,"mutability":"mutable","name":"i","nameLocation":"3687:1:20","nodeType":"VariableDeclaration","scope":3563,"src":"3679:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3538,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3541,"initialValue":{"hexValue":"30","id":3540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3691:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3679:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3718:3:20","subExpression":{"id":3546,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"3720:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3548,"nodeType":"ExpressionStatement","src":"3718:3:20"},"nodeType":"ForStatement","src":"3674:180:20"},{"body":{"id":3588,"nodeType":"Block","src":"3949:209:20","statements":[{"expression":{"arguments":[{"expression":{"id":3578,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"4030:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$33_$","typeString":"type(enum ContractType)"}},"id":3579,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4043:12:20","memberName":"POOL_FACTORY","nodeType":"MemberAccess","referencedDeclaration":29,"src":"4030:25:20","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},{"baseExpression":{"id":3580,"name":"poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"4073:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3582,"indexExpression":{"id":3581,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"4090:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4073:19:20","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":3583,"name":"poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3351,"src":"4110:20:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3585,"indexExpression":{"id":3584,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"4131:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4110:23:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3575,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"3963:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"id":3577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3988:24:20","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":140,"src":"3963:49:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_enum$_ContractType_$33_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address) external"}},"id":3586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3963:184:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3587,"nodeType":"ExpressionStatement","src":"3963:184:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3568,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"3915:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3569,"name":"poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"3919:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3936:6:20","memberName":"length","nodeType":"MemberAccess","src":"3919:23:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3915:27:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3589,"initializationExpression":{"assignments":[3565],"declarations":[{"constant":false,"id":3565,"mutability":"mutable","name":"i","nameLocation":"3908:1:20","nodeType":"VariableDeclaration","scope":3589,"src":"3900:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3564,"name":"uint256","nodeType":"ElementaryTypeName","src":"3900:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3567,"initialValue":{"hexValue":"30","id":3566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3912:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3900:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3944:3:20","subExpression":{"id":3572,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"3946:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3574,"nodeType":"ExpressionStatement","src":"3944:3:20"},"nodeType":"ForStatement","src":"3895:263:20"},{"body":{"id":3612,"nodeType":"Block","src":"4255:116:20","statements":[{"expression":{"arguments":[{"baseExpression":{"id":3604,"name":"aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"4327:10:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3606,"indexExpression":{"id":3605,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"4338:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4327:13:20","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":3607,"name":"aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"4342:14:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3609,"indexExpression":{"id":3608,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"4357:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4342:17:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3601,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"4269:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"id":3603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4294:32:20","memberName":"addOrUpdateBalancerContractAlias","nodeType":"MemberAccess","referencedDeclaration":160,"src":"4269:57:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address) external"}},"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4269:91:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3611,"nodeType":"ExpressionStatement","src":"4269:91:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3594,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"4227:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3595,"name":"aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"4231:10:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4242:6:20","memberName":"length","nodeType":"MemberAccess","src":"4231:17:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4227:21:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3613,"initializationExpression":{"assignments":[3591],"declarations":[{"constant":false,"id":3591,"mutability":"mutable","name":"i","nameLocation":"4220:1:20","nodeType":"VariableDeclaration","scope":3613,"src":"4212:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3590,"name":"uint256","nodeType":"ElementaryTypeName","src":"4212:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3593,"initialValue":{"hexValue":"30","id":3592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4224:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4212:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4250:3:20","subExpression":{"id":3598,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"4252:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3600,"nodeType":"ExpressionStatement","src":"4250:3:20"},"nodeType":"ForStatement","src":"4207:164:20"},{"expression":{"arguments":[{"id":3617,"name":"registerContractRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3491,"src":"4437:20:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3620,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4467:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4459:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3618,"name":"address","nodeType":"ElementaryTypeName","src":"4459:7:20","typeDescriptions":{}}},"id":3621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4459:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3614,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"4412:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4424:12:20","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":3680,"src":"4412:24:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4412:61:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3623,"nodeType":"ExpressionStatement","src":"4412:61:20"},{"expression":{"arguments":[{"id":3627,"name":"addAliasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"4508:12:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3630,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4530:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4522:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3628,"name":"address","nodeType":"ElementaryTypeName","src":"4522:7:20","typeDescriptions":{}}},"id":3631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4522:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3624,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"4483:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4495:12:20","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":3680,"src":"4483:24:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4483:53:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3633,"nodeType":"ExpressionStatement","src":"4483:53:20"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3637,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"4572:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4584:18:20","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":3659,"src":"4572:30:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":3639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4572:32:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3642,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4614:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4606:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3640,"name":"address","nodeType":"ElementaryTypeName","src":"4606:7:20","typeDescriptions":{}}},"id":3643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4606:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3634,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"4547:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4559:12:20","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":3680,"src":"4547:24:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4547:73:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3645,"nodeType":"ExpressionStatement","src":"4547:73:20"}]},"functionSelector":"bd968c18","id":3647,"implemented":true,"kind":"function","modifiers":[],"name":"initializeBalancerContractRegistry","nameLocation":"2855:34:20","nodeType":"FunctionDefinition","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"2889:2:20"},"returnParameters":{"id":3479,"nodeType":"ParameterList","parameters":[],"src":"2901:0:20"},"scope":3648,"src":"2846:1781:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3649,"src":"752:3877:20","usedErrors":[2644,3360,3363],"usedEvents":[]}],"src":"46:4584:20"},"id":20},"contracts/IBasicAuthorizer.sol":{"ast":{"absolutePath":"contracts/IBasicAuthorizer.sol","exportedSymbols":{"IAuthorizer":[218],"IBasicAuthorizer":[3681]},"id":3682,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3650,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":3652,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3682,"sourceUnit":219,"src":"72:91:21","symbolAliases":[{"foreign":{"id":3651,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"81:11:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3653,"name":"IAuthorizer","nameLocations":["195:11:21"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"195:11:21"},"id":3654,"nodeType":"InheritanceSpecifier","src":"195:11:21"}],"canonicalName":"IBasicAuthorizer","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":3681,"linearizedBaseContracts":[3681,218],"name":"IBasicAuthorizer","nameLocation":"175:16:21","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a217fddf","id":3659,"implemented":false,"kind":"function","modifiers":[],"name":"DEFAULT_ADMIN_ROLE","nameLocation":"275:18:21","nodeType":"FunctionDefinition","parameters":{"id":3655,"nodeType":"ParameterList","parameters":[],"src":"293:2:21"},"returnParameters":{"id":3658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3659,"src":"319:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3656,"name":"bytes32","nodeType":"ElementaryTypeName","src":"319:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"318:9:21"},"scope":3681,"src":"266:62:21","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f2ff15d","id":3666,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"343:9:21","nodeType":"FunctionDefinition","parameters":{"id":3664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3661,"mutability":"mutable","name":"role","nameLocation":"361:4:21","nodeType":"VariableDeclaration","scope":3666,"src":"353:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3660,"name":"bytes32","nodeType":"ElementaryTypeName","src":"353:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3663,"mutability":"mutable","name":"account","nameLocation":"375:7:21","nodeType":"VariableDeclaration","scope":3666,"src":"367:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3662,"name":"address","nodeType":"ElementaryTypeName","src":"367:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"352:31:21"},"returnParameters":{"id":3665,"nodeType":"ParameterList","parameters":[],"src":"392:0:21"},"scope":3681,"src":"334:59:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d547741f","id":3673,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"408:10:21","nodeType":"FunctionDefinition","parameters":{"id":3671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3668,"mutability":"mutable","name":"role","nameLocation":"427:4:21","nodeType":"VariableDeclaration","scope":3673,"src":"419:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3667,"name":"bytes32","nodeType":"ElementaryTypeName","src":"419:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3670,"mutability":"mutable","name":"account","nameLocation":"441:7:21","nodeType":"VariableDeclaration","scope":3673,"src":"433:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3669,"name":"address","nodeType":"ElementaryTypeName","src":"433:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"418:31:21"},"returnParameters":{"id":3672,"nodeType":"ParameterList","parameters":[],"src":"458:0:21"},"scope":3681,"src":"399:60:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36568abe","id":3680,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"474:12:21","nodeType":"FunctionDefinition","parameters":{"id":3678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3675,"mutability":"mutable","name":"role","nameLocation":"495:4:21","nodeType":"VariableDeclaration","scope":3680,"src":"487:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3674,"name":"bytes32","nodeType":"ElementaryTypeName","src":"487:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3677,"mutability":"mutable","name":"account","nameLocation":"509:7:21","nodeType":"VariableDeclaration","scope":3680,"src":"501:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3676,"name":"address","nodeType":"ElementaryTypeName","src":"501:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"486:31:21"},"returnParameters":{"id":3679,"nodeType":"ParameterList","parameters":[],"src":"526:0:21"},"scope":3681,"src":"465:62:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3682,"src":"165:364:21","usedErrors":[],"usedEvents":[]}],"src":"46:484:21"},"id":21}},"contracts":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"IBalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"existingContract","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"existingContract\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"isActive\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":\"IBalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:14:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:14:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:15:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:15:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"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\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"contracts/BalancerContractRegistryInitializer.sol":{"BalancerContractRegistryInitializer":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IBalancerContractRegistry","name":"_balancerContractRegistry","type":"address"},{"internalType":"string[]","name":"_routerNames","type":"string[]"},{"internalType":"address[]","name":"_routerAddresses","type":"address[]"},{"internalType":"string[]","name":"_poolFactoryNames","type":"string[]"},{"internalType":"address[]","name":"_poolFactoryAddresses","type":"address[]"},{"internalType":"string[]","name":"_aliasNames","type":"string[]"},{"internalType":"address[]","name":"_aliasAddresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"VaultMismatch","type":"error"},{"inputs":[],"name":"balancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeBalancerContractRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_array_address_dyn_fromMemory":{"entryPoint":2696,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_string_dyn_fromMemory":{"entryPoint":2499,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IVault_fromMemory":{"entryPoint":2456,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_string_dyn":{"entryPoint":2476,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_bytes1":{"entryPoint":2865,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":2809,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2421,"id":null,"parameterSlots":2,"returnSlots":0},"fun_ensureInputLengthMatch":{"entryPoint":2887,"id":2669,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60c0604090808252346103b5576115c6803803809161001e8285610975565b8339810190610100818303126103b55761003781610998565b60208201516001600160a01b039391928482169290918381036103b557828701516001600160401b0381116103b557826100729185016109c3565b60608401516001600160401b0381116103b55783610091918601610a88565b60808501519091906001600160401b0381116103b557846100b39187016109c3565b60a08601519093906001600160401b0381116103b557856100d5918801610a88565b60c08701519095906001600160401b0381116103b557816100f79189016109c3565b60e088015190976001600160401b0382116103b55760049260209261011c9201610a88565b9861012a8551875190610b47565b6101378751895190610b47565b61014489518b5190610b47565b8c516311b2515f60e31b815292839182905afa90811561096b575f91610931575b5089808a169116036109225760805280519068010000000000000000821161040157600154826001558083106108a6575b5060015f9081525f5160206115a65f395f51905f5292916020015b82821061079f5750508251929150506001600160401b038211610401576801000000000000000082116104015760209060025483600255808410610783575b500160025f5260205f205f5b83811061076d575050505080519068010000000000000000821161040157600354826003558083106106f1575b5060035f9081525f5160206115865f395f51905f5292916020015b8282106105e05750508251929150506001600160401b0382116104015768010000000000000000821161040157602090600454836004558084106105c4575b500160045f5260205f205f5b8381106105ae57505050508051906801000000000000000082116104015760055482600555808310610532575b5060055f9081525f5160206115665f395f51905f5292916020015b8282106104155750508251929150506001600160401b0382116104015768010000000000000000821161040157602090600654836006558084106103e5575b5090849392910160065f5260205f205f5b8381106103cb5750505050602090600485518094819363aaabadc560e01b8352165afa9081156103c1575f91610382575b501660a05251610a089081610b5e823960805181818160b3015261083e015260a051816101830152f35b90506020813d6020116103b9575b8161039d60209383610975565b810103126103b5575181811681036103b5575f610358565b5f80fd5b3d9150610390565b83513d5f823e3d90fd5b825190951685820155859460209290920191600101610327565b6103fb9060065f5284845f209182019101610b31565b5f610316565b634e487b7160e01b5f52604160045260245ffd5b80518051906001600160401b038211610401576104328654610af9565b90601f918281116104fa575b50602091831160011461048e5792610474836001959460209487965f92610483575b50508160011b915f199060031b1c19161790565b87555b019401910190926102d7565b015190505f80610460565b90865f5260205f20915f5b601f19851681106104e2575083602093600196938796938794601f198116106104ca575b505050811b018755610477565b01515f1960f88460031b161c191690555f80806104bd565b91926020600181928685015181550194019201610499565b61052390885f5260205f208480870160051c82019260208810610529575b0160051c0190610b31565b5f61043e565b92508192610518565b60055f525f5160206115665f395f51905f529081019083015b81811061055857506102bc565b8061056560019254610af9565b80610572575b500161054b565b601f90818111841461058a5750505f81555b5f61056b565b6105a55f9284845260208420920160051c8201858301610b31565b81835555610584565b600190602089855116940193818401550161028f565b6105da9060045f5284845f209182019101610b31565b5f610283565b80518051906001600160401b038211610401576105fd8654610af9565b90601f918281116106b9575b50602091831160011461064d579261063e836001959460209487965f926104835750508160011b915f199060031b1c19161790565b87555b01940191019092610244565b90865f5260205f20915f5b601f19851681106106a1575083602093600196938796938794601f19811610610689575b505050811b018755610641565b01515f1960f88460031b161c191690555f808061067c565b91926020600181928685015181550194019201610658565b6106e290885f5260205f20600585808801821c830193602089106106e8575b01901c0190610b31565b5f610609565b935082936106d8565b60035f525f5160206115865f395f51905f529081019083015b8181106107175750610229565b8061072460019254610af9565b80610731575b500161070a565b601f9081811184146107495750505f81555b5f61072a565b6107645f9284845260208420920160051c8201858301610b31565b81835555610743565b60019060208b85511694019381840155016101fc565b6107999060025f5284845f209182019101610b31565b5f6101f0565b80518051906001600160401b038211610401576107bc8654610af9565b90601f91828111610878575b50602091831160011461080c57926107fd836001959460209487965f926104835750508160011b915f199060031b1c19161790565b87555b019401910190926101b1565b90865f5260205f20915f5b601f1985168110610860575083602093600196938796938794601f19811610610848575b505050811b018755610800565b01515f1960f88460031b161c191690555f808061083b565b91926020600181928685015181550194019201610817565b6108a090885f5260205f20600585808801821c830193602089106106e85701901c0190610b31565b5f6107c8565b60015f525f5160206115a65f395f51905f529081019083015b8181106108cc5750610196565b806108d960019254610af9565b806108e6575b50016108bf565b601f9081811184146108fe5750505f81555b5f6108df565b6109195f9284845260208420920160051c8201858301610b31565b818355556108f8565b63c1faacc560e01b5f5260045ffd5b90506020813d602011610963575b8161094c60209383610975565b810103126103b55761095d90610998565b5f610165565b3d915061093f565b8b513d5f823e3d90fd5b601f909101601f19168101906001600160401b0382119082101761040157604052565b51906001600160a01b03821682036103b557565b6001600160401b0381116104015760051b60200190565b601f9180601f830112156103b5578151916020926109e0816109ac565b946040936109f16040519788610975565b828752858088019360051b850101948186116103b557868501935b868510610a1e57505050505050505090565b84516001600160401b0391908281116103b55787019084603f830112156103b55789820151928311610401578351610a5e848801601f19168c0182610975565b838152858585850101116103b5575f8b858196888397018386015e83010152815201940193610a0c565b9080601f830112156103b557815190602091610aa3816109ac565b93610ab16040519586610975565b81855260208086019260051b8201019283116103b557602001905b828210610ada575050505090565b81516001600160a01b03811681036103b5578152908301908301610acc565b90600182811c92168015610b27575b6020831014610b1357565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610b08565b818110610b3c575050565b5f8155600101610b31565b03610b4e57565b63aaad13f760e01b5f5260045ffdfe6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea26469706673582212204c39ba673968bc422cef5a162adb229b4e53181cb83169db1195dd070115938064736f6c634300081b0033036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85bb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6","opcodes":"PUSH1 0xC0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x3B5 JUMPI PUSH2 0x15C6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP6 PUSH2 0x975 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SWAP1 PUSH2 0x100 DUP2 DUP4 SUB SLT PUSH2 0x3B5 JUMPI PUSH2 0x37 DUP2 PUSH2 0x998 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP2 SWAP3 DUP5 DUP3 AND SWAP3 SWAP1 SWAP2 DUP4 DUP2 SUB PUSH2 0x3B5 JUMPI DUP3 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP3 PUSH2 0x72 SWAP2 DUP6 ADD PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP4 PUSH2 0x91 SWAP2 DUP7 ADD PUSH2 0xA88 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP5 PUSH2 0xB3 SWAP2 DUP8 ADD PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MLOAD SWAP1 SWAP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP6 PUSH2 0xD5 SWAP2 DUP9 ADD PUSH2 0xA88 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 SWAP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP2 PUSH2 0xF7 SWAP2 DUP10 ADD PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MLOAD SWAP1 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3B5 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x11C SWAP3 ADD PUSH2 0xA88 JUMP JUMPDEST SWAP9 PUSH2 0x12A DUP6 MLOAD DUP8 MLOAD SWAP1 PUSH2 0xB47 JUMP JUMPDEST PUSH2 0x137 DUP8 MLOAD DUP10 MLOAD SWAP1 PUSH2 0xB47 JUMP JUMPDEST PUSH2 0x144 DUP10 MLOAD DUP12 MLOAD SWAP1 PUSH2 0xB47 JUMP JUMPDEST DUP13 MLOAD PUSH4 0x11B2515F PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x96B JUMPI PUSH0 SWAP2 PUSH2 0x931 JUMPI JUMPDEST POP DUP10 DUP1 DUP11 AND SWAP2 AND SUB PUSH2 0x922 JUMPI PUSH1 0x80 MSTORE DUP1 MLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x1 SLOAD DUP3 PUSH1 0x1 SSTORE DUP1 DUP4 LT PUSH2 0x8A6 JUMPI JUMPDEST POP PUSH1 0x1 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x15A6 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x79F JUMPI POP POP DUP3 MLOAD SWAP3 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD DUP4 PUSH1 0x2 SSTORE DUP1 DUP5 LT PUSH2 0x783 JUMPI JUMPDEST POP ADD PUSH1 0x2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x76D JUMPI POP POP POP POP DUP1 MLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x3 SLOAD DUP3 PUSH1 0x3 SSTORE DUP1 DUP4 LT PUSH2 0x6F1 JUMPI JUMPDEST POP PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x1586 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x5E0 JUMPI POP POP DUP3 MLOAD SWAP3 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x4 SLOAD DUP4 PUSH1 0x4 SSTORE DUP1 DUP5 LT PUSH2 0x5C4 JUMPI JUMPDEST POP ADD PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x5AE JUMPI POP POP POP POP DUP1 MLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x5 SLOAD DUP3 PUSH1 0x5 SSTORE DUP1 DUP4 LT PUSH2 0x532 JUMPI JUMPDEST POP PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x1566 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x415 JUMPI POP POP DUP3 MLOAD SWAP3 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x6 SLOAD DUP4 PUSH1 0x6 SSTORE DUP1 DUP5 LT PUSH2 0x3E5 JUMPI JUMPDEST POP SWAP1 DUP5 SWAP4 SWAP3 SWAP2 ADD PUSH1 0x6 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x3CB JUMPI POP POP POP POP PUSH1 0x20 SWAP1 PUSH1 0x4 DUP6 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP4 MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3C1 JUMPI PUSH0 SWAP2 PUSH2 0x382 JUMPI JUMPDEST POP AND PUSH1 0xA0 MSTORE MLOAD PUSH2 0xA08 SWAP1 DUP2 PUSH2 0xB5E DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xB3 ADD MSTORE PUSH2 0x83E ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x183 ADD MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3B9 JUMPI JUMPDEST DUP2 PUSH2 0x39D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x975 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B5 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x3B5 JUMPI PUSH0 PUSH2 0x358 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x390 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 MLOAD SWAP1 SWAP6 AND DUP6 DUP3 ADD SSTORE DUP6 SWAP5 PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x327 JUMP JUMPDEST PUSH2 0x3FB SWAP1 PUSH1 0x6 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x316 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH2 0x432 DUP7 SLOAD PUSH2 0xAF9 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x4FA JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x48E JUMPI SWAP3 PUSH2 0x474 DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x483 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x2D7 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x460 JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x4E2 JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x4CA JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x477 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x4BD JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x499 JUMP JUMPDEST PUSH2 0x523 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 DUP5 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 PUSH1 0x20 DUP9 LT PUSH2 0x529 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x43E JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x518 JUMP JUMPDEST PUSH1 0x5 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x1566 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x558 JUMPI POP PUSH2 0x2BC JUMP JUMPDEST DUP1 PUSH2 0x565 PUSH1 0x1 SWAP3 SLOAD PUSH2 0xAF9 JUMP JUMPDEST DUP1 PUSH2 0x572 JUMPI JUMPDEST POP ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x58A JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x56B JUMP JUMPDEST PUSH2 0x5A5 PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB31 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x584 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x20 DUP10 DUP6 MLOAD AND SWAP5 ADD SWAP4 DUP2 DUP5 ADD SSTORE ADD PUSH2 0x28F JUMP JUMPDEST PUSH2 0x5DA SWAP1 PUSH1 0x4 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x283 JUMP JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH2 0x5FD DUP7 SLOAD PUSH2 0xAF9 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x6B9 JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x64D JUMPI SWAP3 PUSH2 0x63E DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x483 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x244 JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x6A1 JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x689 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x641 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x67C JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x658 JUMP JUMPDEST PUSH2 0x6E2 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x5 DUP6 DUP1 DUP9 ADD DUP3 SHR DUP4 ADD SWAP4 PUSH1 0x20 DUP10 LT PUSH2 0x6E8 JUMPI JUMPDEST ADD SWAP1 SHR ADD SWAP1 PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x609 JUMP JUMPDEST SWAP4 POP DUP3 SWAP4 PUSH2 0x6D8 JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x1586 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x717 JUMPI POP PUSH2 0x229 JUMP JUMPDEST DUP1 PUSH2 0x724 PUSH1 0x1 SWAP3 SLOAD PUSH2 0xAF9 JUMP JUMPDEST DUP1 PUSH2 0x731 JUMPI JUMPDEST POP ADD PUSH2 0x70A JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x749 JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x72A JUMP JUMPDEST PUSH2 0x764 PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB31 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x743 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x20 DUP12 DUP6 MLOAD AND SWAP5 ADD SWAP4 DUP2 DUP5 ADD SSTORE ADD PUSH2 0x1FC JUMP JUMPDEST PUSH2 0x799 SWAP1 PUSH1 0x2 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x1F0 JUMP JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH2 0x7BC DUP7 SLOAD PUSH2 0xAF9 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x878 JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x80C JUMPI SWAP3 PUSH2 0x7FD DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x483 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x1B1 JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x860 JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x848 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x800 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x83B JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x817 JUMP JUMPDEST PUSH2 0x8A0 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x5 DUP6 DUP1 DUP9 ADD DUP3 SHR DUP4 ADD SWAP4 PUSH1 0x20 DUP10 LT PUSH2 0x6E8 JUMPI ADD SWAP1 SHR ADD SWAP1 PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x1 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x15A6 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x8CC JUMPI POP PUSH2 0x196 JUMP JUMPDEST DUP1 PUSH2 0x8D9 PUSH1 0x1 SWAP3 SLOAD PUSH2 0xAF9 JUMP JUMPDEST DUP1 PUSH2 0x8E6 JUMPI JUMPDEST POP ADD PUSH2 0x8BF JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x8FE JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x919 PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB31 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x8F8 JUMP JUMPDEST PUSH4 0xC1FAACC5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x963 JUMPI JUMPDEST DUP2 PUSH2 0x94C PUSH1 0x20 SWAP4 DUP4 PUSH2 0x975 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B5 JUMPI PUSH2 0x95D SWAP1 PUSH2 0x998 JUMP JUMPDEST PUSH0 PUSH2 0x165 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x93F JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x401 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x3B5 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x401 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1F SWAP2 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x3B5 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 PUSH2 0x9E0 DUP2 PUSH2 0x9AC JUMP JUMPDEST SWAP5 PUSH1 0x40 SWAP4 PUSH2 0x9F1 PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x975 JUMP JUMPDEST DUP3 DUP8 MSTORE DUP6 DUP1 DUP9 ADD SWAP4 PUSH1 0x5 SHL DUP6 ADD ADD SWAP5 DUP2 DUP7 GT PUSH2 0x3B5 JUMPI DUP7 DUP6 ADD SWAP4 JUMPDEST DUP7 DUP6 LT PUSH2 0xA1E JUMPI POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 SWAP1 DUP3 DUP2 GT PUSH2 0x3B5 JUMPI DUP8 ADD SWAP1 DUP5 PUSH1 0x3F DUP4 ADD SLT ISZERO PUSH2 0x3B5 JUMPI DUP10 DUP3 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x401 JUMPI DUP4 MLOAD PUSH2 0xA5E DUP5 DUP9 ADD PUSH1 0x1F NOT AND DUP13 ADD DUP3 PUSH2 0x975 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP6 DUP6 DUP6 DUP6 ADD ADD GT PUSH2 0x3B5 JUMPI PUSH0 DUP12 DUP6 DUP2 SWAP7 DUP9 DUP4 SWAP8 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP4 PUSH2 0xA0C JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x3B5 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0xAA3 DUP2 PUSH2 0x9AC JUMP JUMPDEST SWAP4 PUSH2 0xAB1 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x975 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x3B5 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xADA JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x3B5 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xACC JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xB27 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB13 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xB08 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0xB3C JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB31 JUMP JUMPDEST SUB PUSH2 0xB4E JUMPI JUMP JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x2623A2D0 EQ PUSH2 0x7F6 JUMPI POP PUSH4 0xBD968C18 EQ PUSH2 0x37 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0xFF DUP5 AND PUSH2 0x7CF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP4 PUSH1 0x1 SWAP5 DUP6 SWAP2 AND OR PUSH0 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP3 DUP3 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP5 MSTORE PUSH32 0xE0376AB400000000000000000000000000000000000000000000000000000000 SWAP2 DUP3 DUP5 DUP7 ADD MSTORE PUSH1 0x20 SWAP7 PUSH1 0x24 SWAP2 DUP9 DUP8 DUP5 DUP2 DUP6 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x7C5 JUMPI PUSH0 SWAP8 PUSH2 0x796 JUMPI JUMPDEST POP DUP8 MLOAD SWAP4 DUP5 MSTORE PUSH32 0x2967AF9600000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP8 DUP7 ADD MSTORE DUP10 DUP6 DUP6 DUP2 DUP7 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x78C JUMPI PUSH0 SWAP6 PUSH2 0x75D JUMPI JUMPDEST POP DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x3B4 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP10 DUP3 ADD DUP12 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x753 JUMPI PUSH2 0x740 JUMPI JUMPDEST POP DUP8 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP9 DUP2 ADD DUP8 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP14 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x71F JUMPI JUMPDEST POP SWAP6 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP1 JUMPDEST PUSH2 0x608 JUMPI JUMPDEST POP DUP12 DUP14 JUMPDEST PUSH2 0x511 JUMPI JUMPDEST POP POP DUP12 DUP12 SWAP1 JUMPDEST PUSH2 0x3FF JUMPI JUMPDEST POP POP POP POP POP DUP7 SWAP8 POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP5 DUP3 ADD SWAP6 DUP7 MSTORE ADDRESS PUSH1 0x20 DUP8 ADD MSTORE SWAP5 DUP9 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x3F5 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0x3E1 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x3BF JUMPI SWAP1 DUP8 SWAP2 PUSH2 0x3C9 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x3BF JUMPI DUP8 SWAP7 PUSH2 0x388 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0x384 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x37B JUMPI POP PUSH2 0x368 JUMPI POP RETURN JUMPDEST PUSH2 0x371 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x378 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0x3B8 JUMPI JUMPDEST PUSH2 0x3A1 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI DUP6 SWAP5 MLOAD SWAP4 PUSH0 DUP1 PUSH2 0x32C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x397 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x3D2 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x384 JUMPI DUP6 PUSH0 PUSH2 0x2F0 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0x3EA SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x3DD JUMPI DUP7 PUSH0 PUSH2 0x2B8 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x6 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x4E1 JUMPI PUSH0 MSTORE DUP2 DUP2 PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD SLOAD AND DUP5 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP13 DUP12 DUP1 MLOAD DUP1 SWAP4 DUP2 SWAP3 DUP9 DUP4 MSTORE DUP14 DUP4 ADD MSTORE PUSH2 0x481 PUSH1 0x44 DUP4 ADD DUP8 PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 DUP11 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x4AE JUMPI JUMPDEST POP POP DUP6 ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x4BE SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x4A0 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x32 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x259 JUMP JUMPDEST DUP14 PUSH1 0x3 SLOAD DUP3 LT ISZERO PUSH2 0x602 JUMPI POP DUP9 SLOAD DUP2 LT ISZERO PUSH2 0x4E1 JUMPI DUP9 PUSH0 MSTORE DUP3 DUP2 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD SLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x5FE JUMPI DUP14 DUP16 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x59B PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x5CF JUMPI JUMPDEST POP POP SWAP1 DUP7 DUP1 SWAP3 ADD SWAP2 POP SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x249 JUMP JUMPDEST PUSH2 0x5E0 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x5BC JUMP JUMPDEST DUP15 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP14 DUP1 REVERT JUMPDEST POP PUSH2 0x24E JUMP JUMPDEST DUP14 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x719 JUMPI POP PUSH1 0x2 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x6EE JUMPI DUP1 PUSH0 MSTORE DUP4 DUP3 PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE ADD SLOAD AND SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x6EA JUMPI DUP15 SWAP1 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x694 PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x6C7 JUMPI JUMPDEST POP POP DUP7 DUP1 SWAP2 ADD SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 POP PUSH2 0x240 JUMP JUMPDEST PUSH2 0x6D8 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x6B5 JUMP JUMPDEST DUP15 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x32 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP PUSH2 0x245 JUMP JUMPDEST PUSH2 0x72F SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x236 JUMP JUMPDEST PUSH2 0x74B SWAP2 SWAP14 POP PUSH2 0x862 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0x1FA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x785 JUMPI JUMPDEST PUSH2 0x775 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x17F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x76B JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7BE JUMPI JUMPDEST PUSH2 0x7AE DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP6 PUSH0 PUSH2 0x13D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7A4 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 SLOAD PUSH0 SWAP4 SWAP3 PUSH1 0x1 DUP1 DUP4 AND SWAP4 DUP4 DUP3 SHR SWAP4 DUP6 ISZERO PUSH2 0x9C8 JUMPI JUMPDEST PUSH1 0x20 SWAP6 DUP7 DUP7 LT DUP2 EQ PUSH2 0x99B JUMPI DUP6 DUP6 MSTORE SWAP1 DUP2 ISZERO PUSH2 0x95E JUMPI POP PUSH1 0x1 EQ PUSH2 0x920 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP4 SWAP5 SWAP6 POP PUSH0 SWAP3 SWAP2 SWAP3 MSTORE DUP4 PUSH0 KECCAK256 SWAP3 DUP5 PUSH0 SWAP5 JUMPDEST DUP4 DUP7 LT PUSH2 0x94A JUMPI POP POP POP POP ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST DUP1 SLOAD DUP6 DUP8 ADD DUP4 ADD MSTORE SWAP5 ADD SWAP4 DUP6 SWAP1 DUP3 ADD PUSH2 0x932 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP6 ADD MSTORE POP POP POP SWAP1 ISZERO ISZERO PUSH1 0x5 SHL ADD ADD SWAP2 POP PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x8FA JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4C CODECOPY 0xBA PUSH8 0x3968BC422CEF5A16 0x2A 0xDB 0x22 SWAP12 0x4E MSTORE8 XOR SHR 0xB8 BALANCE PUSH10 0xDB1195DD070115938064 PUSH20 0x6F6C634300081B0033036B6384B5ECA791C62761 ISZERO 0x2D 0xC PUSH26 0xBB0604C104A5FB6F4EB0703F3154BB3DB0C2575A0E9E593C00F9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85BB10E2D527612073B26EECDFD71 PUSH31 0x6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF600000000000000000000000000 ","sourceMap":"752:3877:20:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;2286:70;752:3877;;;;;;;:::i;:::-;;1949:23;752:3877;;;;1949:23;;:::i;:::-;2045:28;752:3877;;;;2045:28;;:::i;:::-;2140:22;752:3877;;;;2140:22;;:::i;:::-;752:3877;;-1:-1:-1;;;2286:70:20;;752:3877;;;;;2286:70;;;;;;;-1:-1:-1;2286:70:20;;;-1:-1:-1;752:3877:20;;;;;;;2370:22;2366:75;;752:3877;2451:52;752:3877;;;;;;;;2514:26;752:3877;;2514:26;752:3877;;;;;;-1:-1:-1;;2514:26:20;-1:-1:-1;752:3877:20;;;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;-1:-1:-1;;;;;;;752:3877:20;;;;;;;;;;;2550:34;752:3877;;2550:34;752:3877;;;;;;;;;2550:34;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;2594:36;752:3877;;2594:36;752:3877;;;;;;;-1:-1:-1;2594:36:20;-1:-1:-1;752:3877:20;;;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;-1:-1:-1;;;;;;;752:3877:20;;;;;;;;;;;2286:70;752:3877;;2286:70;752:3877;;;;;;;;;2286:70;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;2694:24;752:3877;;2694:24;752:3877;;;;;;;-1:-1:-1;2694:24:20;-1:-1:-1;752:3877:20;;;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;-1:-1:-1;;;;;;;752:3877:20;;;;;;;;;;;2728:32;752:3877;;2728:32;752:3877;;;;;;;;;;;;;;2728:32;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;752:3877:20;;;;;;;;;;;;2286:70;752:3877;;;;;;;;;2810:21;;752:3877;2810:21;;;;;;;-1:-1:-1;2810:21:20;;;752:3877;;;;2771:62;752:3877;;;;;;;;;;;;;;;;;;;;;;;;;2810:21;;;752:3877;2810:21;;752:3877;2810:21;;;;;;752:3877;2810:21;;;:::i;:::-;;;752:3877;;;;;;;;;;;;2810:21;;;752:3877;-1:-1:-1;752:3877:20;;2810:21;;;-1:-1:-1;2810:21:20;;;752:3877;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;2728:32;-1:-1:-1;752:3877:20;;;-1:-1:-1;752:3877:20;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;752:3877:20;;2286:70;752:3877;;-1:-1:-1;752:3877:20;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;;752:3877:20;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2594:36;752:3877;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;;;;2694:24;752:3877;;;;;;;;;;;2694:24;752:3877;;;;:::i;:::-;;;;;;;;;;;;2694:24;-1:-1:-1;752:3877:20;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;2694:24;752:3877;;;;;;;:::i;:::-;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;2286:70;-1:-1:-1;752:3877:20;;;-1:-1:-1;752:3877:20;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;;752:3877:20;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2594:36;752:3877;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;2594:36;-1:-1:-1;752:3877:20;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;2550:34;-1:-1:-1;752:3877:20;;;-1:-1:-1;752:3877:20;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;;752:3877:20;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2514:26;-1:-1:-1;752:3877:20;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;2366:75;2415:15;;;-1:-1:-1;2415:15:20;2286:70;-1:-1:-1;2415:15:20;2286:70;;;752:3877;2286:70;;752:3877;2286:70;;;;;;752:3877;2286:70;;;:::i;:::-;;;752:3877;;;;;;;:::i;:::-;2286:70;;;;;;-1:-1:-1;2286:70:20;;;752:3877;;;-1:-1:-1;752:3877:20;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;752:3877:20;;;;;;:::o;:::-;-1:-1:-1;;;;;752:3877:20;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;1418:149:15;1500:6;1496:65;;1418:149::o;1496:65::-;1529:21;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string_storage":{"entryPoint":2276,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2211,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_2885":{"entryPoint":2146,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"3334":[{"length":32,"start":179},{"length":32,"start":2110}],"3337":[{"length":32,"start":387}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea26469706673582212204c39ba673968bc422cef5a162adb229b4e53181cb83169db1195dd070115938064736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x2623A2D0 EQ PUSH2 0x7F6 JUMPI POP PUSH4 0xBD968C18 EQ PUSH2 0x37 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0xFF DUP5 AND PUSH2 0x7CF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP4 PUSH1 0x1 SWAP5 DUP6 SWAP2 AND OR PUSH0 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP3 DUP3 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP5 MSTORE PUSH32 0xE0376AB400000000000000000000000000000000000000000000000000000000 SWAP2 DUP3 DUP5 DUP7 ADD MSTORE PUSH1 0x20 SWAP7 PUSH1 0x24 SWAP2 DUP9 DUP8 DUP5 DUP2 DUP6 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x7C5 JUMPI PUSH0 SWAP8 PUSH2 0x796 JUMPI JUMPDEST POP DUP8 MLOAD SWAP4 DUP5 MSTORE PUSH32 0x2967AF9600000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP8 DUP7 ADD MSTORE DUP10 DUP6 DUP6 DUP2 DUP7 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x78C JUMPI PUSH0 SWAP6 PUSH2 0x75D JUMPI JUMPDEST POP DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x3B4 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP10 DUP3 ADD DUP12 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x753 JUMPI PUSH2 0x740 JUMPI JUMPDEST POP DUP8 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP9 DUP2 ADD DUP8 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP14 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x71F JUMPI JUMPDEST POP SWAP6 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP1 JUMPDEST PUSH2 0x608 JUMPI JUMPDEST POP DUP12 DUP14 JUMPDEST PUSH2 0x511 JUMPI JUMPDEST POP POP DUP12 DUP12 SWAP1 JUMPDEST PUSH2 0x3FF JUMPI JUMPDEST POP POP POP POP POP DUP7 SWAP8 POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP5 DUP3 ADD SWAP6 DUP7 MSTORE ADDRESS PUSH1 0x20 DUP8 ADD MSTORE SWAP5 DUP9 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x3F5 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0x3E1 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x3BF JUMPI SWAP1 DUP8 SWAP2 PUSH2 0x3C9 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x3BF JUMPI DUP8 SWAP7 PUSH2 0x388 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0x384 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x37B JUMPI POP PUSH2 0x368 JUMPI POP RETURN JUMPDEST PUSH2 0x371 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x378 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0x3B8 JUMPI JUMPDEST PUSH2 0x3A1 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI DUP6 SWAP5 MLOAD SWAP4 PUSH0 DUP1 PUSH2 0x32C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x397 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x3D2 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x384 JUMPI DUP6 PUSH0 PUSH2 0x2F0 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0x3EA SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x3DD JUMPI DUP7 PUSH0 PUSH2 0x2B8 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x6 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x4E1 JUMPI PUSH0 MSTORE DUP2 DUP2 PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD SLOAD AND DUP5 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP13 DUP12 DUP1 MLOAD DUP1 SWAP4 DUP2 SWAP3 DUP9 DUP4 MSTORE DUP14 DUP4 ADD MSTORE PUSH2 0x481 PUSH1 0x44 DUP4 ADD DUP8 PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 DUP11 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x4AE JUMPI JUMPDEST POP POP DUP6 ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x4BE SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x4A0 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x32 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x259 JUMP JUMPDEST DUP14 PUSH1 0x3 SLOAD DUP3 LT ISZERO PUSH2 0x602 JUMPI POP DUP9 SLOAD DUP2 LT ISZERO PUSH2 0x4E1 JUMPI DUP9 PUSH0 MSTORE DUP3 DUP2 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD SLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x5FE JUMPI DUP14 DUP16 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x59B PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x5CF JUMPI JUMPDEST POP POP SWAP1 DUP7 DUP1 SWAP3 ADD SWAP2 POP SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x249 JUMP JUMPDEST PUSH2 0x5E0 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x5BC JUMP JUMPDEST DUP15 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP14 DUP1 REVERT JUMPDEST POP PUSH2 0x24E JUMP JUMPDEST DUP14 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x719 JUMPI POP PUSH1 0x2 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x6EE JUMPI DUP1 PUSH0 MSTORE DUP4 DUP3 PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE ADD SLOAD AND SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x6EA JUMPI DUP15 SWAP1 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x694 PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x6C7 JUMPI JUMPDEST POP POP DUP7 DUP1 SWAP2 ADD SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 POP PUSH2 0x240 JUMP JUMPDEST PUSH2 0x6D8 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x6B5 JUMP JUMPDEST DUP15 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x32 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP PUSH2 0x245 JUMP JUMPDEST PUSH2 0x72F SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x236 JUMP JUMPDEST PUSH2 0x74B SWAP2 SWAP14 POP PUSH2 0x862 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0x1FA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x785 JUMPI JUMPDEST PUSH2 0x775 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x17F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x76B JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7BE JUMPI JUMPDEST PUSH2 0x7AE DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP6 PUSH0 PUSH2 0x13D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7A4 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 SLOAD PUSH0 SWAP4 SWAP3 PUSH1 0x1 DUP1 DUP4 AND SWAP4 DUP4 DUP3 SHR SWAP4 DUP6 ISZERO PUSH2 0x9C8 JUMPI JUMPDEST PUSH1 0x20 SWAP6 DUP7 DUP7 LT DUP2 EQ PUSH2 0x99B JUMPI DUP6 DUP6 MSTORE SWAP1 DUP2 ISZERO PUSH2 0x95E JUMPI POP PUSH1 0x1 EQ PUSH2 0x920 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP4 SWAP5 SWAP6 POP PUSH0 SWAP3 SWAP2 SWAP3 MSTORE DUP4 PUSH0 KECCAK256 SWAP3 DUP5 PUSH0 SWAP5 JUMPDEST DUP4 DUP7 LT PUSH2 0x94A JUMPI POP POP POP POP ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST DUP1 SLOAD DUP6 DUP8 ADD DUP4 ADD MSTORE SWAP5 ADD SWAP4 DUP6 SWAP1 DUP3 ADD PUSH2 0x932 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP6 ADD MSTORE POP POP POP SWAP1 ISZERO ISZERO PUSH1 0x5 SHL ADD ADD SWAP2 POP PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x8FA JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4C CODECOPY 0xBA PUSH8 0x3968BC422CEF5A16 0x2A 0xDB 0x22 SWAP12 0x4E MSTORE8 XOR SHR 0xB8 BALANCE PUSH10 0xDB1195DD070115938064 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"752:3877:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2970:70;;752:3877;3065:4;;752:3877;;;;;;;;3203:24;;752:3877;;;;;;3179:145;;;3255:59;3179:145;;;;;752:3877;3179:145;752:3877;;3179:145;;;;;;;;;;;;;752:3877;3179:145;;;752:3877;;;;3357:153;;;3433:67;3357:153;;;;;752:3877;3357:153;;;;;;;;;;;;752:3877;3357:153;;;752:3877;3521:11;;;752:3877;3521:58;;;;;;752:3877;;;3521:58;;;;;;752:3877;;;3573:4;752:3877;;;;;;;;;;;;;;;3521:58;;;;;;;;;;;;752:3877;3589:50;;;;;;752:3877;;3589:50;;;;;;752:3877;;;3573:4;752:3877;;;;3573:4;;752:3877;;;;;;3589:50;;;;;;;;;;;;;;;;;;;;;752:3877;3679:13;;;;;;;;3674:180;3065:4;;;3674:180;-1:-1:-1;3900:13:20;;3065:4;;;3895:263;4212:13;;;;4207:164;3065:4;;;4207:164;4412:61;;;;;;;;;;;;;752:3877;;;4412:61;;;;;;752:3877;;;3573:4;752:3877;;;;;;;;;;;;;4412:61;;;;;;;;;;;;;;;4207:164;4483:53;;;;;;;752:3877;;4483:53;;;;;;752:3877;;;3573:4;752:3877;;;;;;;;;;;;;4483:53;;;;;;;;;;;;;;;4207:164;752:3877;;;;;4572:32;;;;;;;;;;;;;;;;;;4207:164;4547:73;;;;;;;752:3877;;4547:73;;;;;;752:3877;;;3573:4;752:3877;;;;;;;;;;;;;;;;;;4547:73;;;;;;;;;;;;752:3877;;4547:73;;;;:::i;:::-;752:3877;;4547:73;752:3877;;;;4547:73;752:3877;;;;;;;;4547:73;752:3877;;;4572:32;;;;;;;;;;;;;;;;;;:::i;:::-;;;752:3877;;;;;;;4572:32;;;;;752:3877;;;;4572:32;;;;;;752:3877;;;;;;;;;4483:53;;;;:::i;:::-;752:3877;;4483:53;;;;;752:3877;;;4412:61;;;;:::i;:::-;752:3877;;4412:61;;;;;752:3877;;;;;;;;;4250:3;4231:10;752:3877;4227:21;;;;;4342:14;752:3877;;;;;;;;;;;;;;;4269:91;;;;;752:3877;;;;4269:91;;;;;;;;;;752:3877;;;;;;;;;:::i;:::-;;;;;;4269:91;;;;;;;;;;;;;;;;;;;;;4250:3;;;;752:3877;4212:13;;;;;;;4269:91;;;;;;;;;;;:::i;:::-;752:3877;;4269:91;;;;;;;;;;752:3877;;;;4269:91;752:3877;;;;;;;;;4269:91;752:3877;;;;;;;;;;;;;4227:21;;;3944:3;752:3877;;;3915:27;;;;;752:3877;;;;;;;;;;;;;;;;;3963:184;;;;;752:3877;;;;;3963:184;;;;;;;;;;752:3877;;;;;;;;;;;;;;:::i;:::-;;;;;;3963:184;;;;;;;;;;;;;;;;;;;;;;3944:3;;;;;;;752:3877;3900:13;;;;;;;;;3963:184;;;;;;;;;;;;:::i;:::-;752:3877;;3963:184;;;;;;;;;;;;752:3877;;;;;;;;;;;3963:184;752:3877;;;3915:27;;;;3718:3;752:3877;;;3694:22;;;;;3787:19;;752:3877;;;;;;;;;;;;;;;;3737:106;;;;;;752:3877;;;;;3737:106;;;;;;;;;;752:3877;;;;;;;;;;;;;;:::i;:::-;;;;;;3737:106;;;;;;;;;;;;;;;;;;;;;;3718:3;;;;;;752:3877;3679:13;;;;;;;;;3737:106;;;;;;;;;;;;:::i;:::-;752:3877;;3737:106;;;;;;;;;;;;752:3877;;;;;;;;;;;;;3694:22;;;;3589:50;;;;;;;;;;;:::i;:::-;752:3877;;3589:50;;;;;;;;;;3521:58;;;;;;:::i;:::-;752:3877;3521:58;;;;;752:3877;;;;;;;;;3357:153;;;;;;;;;;;;;;;;;:::i;:::-;;;752:3877;;;;;3357:153;;;;;;;;;;752:3877;;;;;;;;;3179:145;;;;;;;;;;;;;;;;;:::i;:::-;;;752:3877;;;;;3179:145;;;;;;;;;;752:3877;;;;;;;;;2970:70;3009:20;;752:3877;3009:20;752:3877;3009:20;752:3877;;;;;;;;;;;;803:67;752:3877;803:67;752:3877;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;752:3877:20;;;;;-1:-1:-1;752:3877:20;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;752:3877:20;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;-1:-1:-1;752:3877:20;;;;;-1:-1:-1;752:3877:20;;;;;;;"},"methodIdentifiers":{"balancerContractRegistry()":"2623a2d0","initializeBalancerContractRegistry()":"bd968c18"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"_balancerContractRegistry\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"_routerNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"_routerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"_poolFactoryNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"_poolFactoryAddresses\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"_aliasNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"_aliasAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"balancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeBalancerContractRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"notice\":\"The initialization can only be done once.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"VaultMismatch()\":[{\"notice\":\"The Vault passed in as a sanity check doesn't match the Vault associated with the registry.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerContractRegistryInitializer.sol\":\"BalancerContractRegistryInitializer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/BalancerContractRegistryInitializer.sol\":{\"keccak256\":\"0x56f8e67ee71abd449fa27fd9a9b379ee292aba0a9db35cab8bfa694170dfc9e8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e981beb8286e9e22c28a1e40836d2c8fdae84b0691e34c60817250e360840c1c\",\"dweb:/ipfs/Qme1m4TbV34nQnq4NFXnouRzfpp38WhGJrY7qAUxQwMMYP\"]},\"contracts/IBasicAuthorizer.sol\":{\"keccak256\":\"0xbda2c695fbb5f3a7e3b76b0390be6547ff73a4cbf96416c0e031c9613181c4ad\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f36524c565690b16dfade3ca789be75a7f2d39083277682cf001c3a004790a9a\",\"dweb:/ipfs/QmeTChx3pYM2kGirNhJVncVx7jFct7XfT2LeowkJcrgfSr\"]}},\"version\":1}"}},"contracts/IBasicAuthorizer.sol":{"IBasicAuthorizer":{"abi":[{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","canPerform(bytes32,address,address)":"9be2a884","grantRole(bytes32,address)":"2f2ff15d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IBasicAuthorizer.sol\":\"IBasicAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"contracts/IBasicAuthorizer.sol\":{\"keccak256\":\"0xbda2c695fbb5f3a7e3b76b0390be6547ff73a4cbf96416c0e031c9613181c4ad\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f36524c565690b16dfade3ca789be75a7f2d39083277682cf001c3a004790a9a\",\"dweb:/ipfs/QmeTChx3pYM2kGirNhJVncVx7jFct7XfT2LeowkJcrgfSr\"]}},\"version\":1}"}}}}} \ No newline at end of file From ee5898e076e1b89955752d9effd6d6d233fcacc8 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Sun, 16 Feb 2025 20:43:50 -0500 Subject: [PATCH 03/11] test: add fork test --- .../test/task.fork.ts | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts diff --git a/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts b/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts new file mode 100644 index 000000000..4b7d5078b --- /dev/null +++ b/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts @@ -0,0 +1,141 @@ +import hre from 'hardhat'; +import { expect } from 'chai'; +import { Contract } from 'ethers'; + +import { fp } from '@helpers/numbers'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; + +import { describeForkTest } from '@src'; +import { Task, TaskMode } from '@src'; +import { getForkedNetwork } from '@src'; +import { impersonate } from '@src'; +import { actionId } from '@helpers/models/misc/actions'; + +describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, function () { + let govMultisig: SignerWithAddress; + let registryInitializer: Contract; + let registry: Contract; + + let authorizer: Contract; + let router: Contract; + let batchRouter: Contract; + let bufferRouter: Contract; + let compositeLiquidityRouter: Contract; + let weightedPoolFactory: Contract; + let stablePoolFactory: Contract; + let stableSurgePoolFactory: Contract; + + let task: Task; + + const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + + enum ContractType { + OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case + POOL_FACTORY, + ROUTER, + HOOK, + ERC4626, + } + + before('run task', async () => { + task = new Task('20250221-balancer-registry-initializer', TaskMode.TEST, getForkedNetwork(hre)); + await task.run({ force: true }); + registryInitializer = await task.deployedInstance('BalancerContractRegistryInitializer'); + }); + + before('setup contracts', async () => { + const authorizerTask = new Task('20210418-authorizer', TaskMode.READ_ONLY, getForkedNetwork(hre)); + authorizer = await authorizerTask.deployedInstance('Authorizer'); + + const registryTask = new Task('20250117-v3-contract-registry', TaskMode.READ_ONLY, getForkedNetwork(hre)); + registry = await registryTask.deployedInstance('BalancerContractRegistry'); + + const routerTask = new Task('20241205-v3-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); + router = await routerTask.deployedInstance('Router'); + + const batchRouterTask = new Task('20241205-v3-batch-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); + batchRouter = await batchRouterTask.deployedInstance('BatchRouter'); + + const bufferRouterTask = new Task('20241205-v3-buffer-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); + bufferRouter = await bufferRouterTask.deployedInstance('BufferRouter'); + + const clrTask = new Task('20250123-v3-composite-liquidity-router-v2', TaskMode.READ_ONLY, getForkedNetwork(hre)); + compositeLiquidityRouter = await clrTask.deployedInstance('CompositeLiquidityRouter'); + + const weightedPoolTask = new Task('20241205-v3-weighted-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); + weightedPoolFactory = await weightedPoolTask.deployedInstance('WeightedPoolFactory'); + + const stablePoolTask = new Task('20241205-v3-stable-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); + stablePoolFactory = await stablePoolTask.deployedInstance('StablePoolFactory'); + + const stableSurgePoolTask = new Task('20250121-v3-stable-surge', TaskMode.READ_ONLY, getForkedNetwork(hre)); + stableSurgePoolFactory = await stableSurgePoolTask.deployedInstance('StableSurgePoolFactory'); + }); + + before('grant permissions', async () => { + govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + + await authorizer.connect(govMultisig).grantRole(await authorizer.DEFAULT_ADMIN_ROLE(), registryInitializer.address); + }); + + it('is initializing the correct registry', async () => { + expect(await registryInitializer.balancerContractRegistry()).to.eq(registry.address); + }); + + it('perform registry initialization', async () => { + await registryInitializer.initializeBalancerContractRegistry(); + }); + + it('cannot initialize twice', async () => { + await expect(registryInitializer.initializeBalancerContractRegistry()).to.be.reverted; + }); + + it('does not hold permission to register contracts', async () => { + const permission = await actionId(registry, 'registerBalancerContract'); + expect(await authorizer.hasRole(permission, registryInitializer.address)).to.be.false; + }); + + it('does not hold permission to add aliases', async () => { + const permission = await actionId(registry, 'addOrUpdateBalancerContractAlias'); + expect(await authorizer.hasRole(permission, registryInitializer.address)).to.be.false; + }); + + it('renounces the admin role', async () => { + expect(await authorizer.hasRole(await authorizer.DEFAULT_ADMIN_ROLE(), registryInitializer.address)).to.be.false; + }); + + it('has registered the routers', async () => { + expect(await registry.isTrustedRouter(router.address)).to.be.true; + expect(await registry.isTrustedRouter(batchRouter.address)).to.be.true; + expect(await registry.isTrustedRouter(bufferRouter.address)).to.be.true; + expect(await registry.isTrustedRouter(compositeLiquidityRouter.address)).to.be.true; + }); + + it('has registered the pool factories', async () => { + let info = await registry.getBalancerContractInfo(weightedPoolFactory.address); + _validateInfo(info); + + info = await registry.getBalancerContractInfo(stablePoolFactory.address); + _validateInfo(info); + + info = await registry.getBalancerContractInfo(stableSurgePoolFactory.address); + _validateInfo(info); + }); + + it('has registered the aliases', async () => { + let [contractAddress, isActive] = await registry.getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool'); + expect(contractAddress).to.eq(weightedPoolFactory.address); + expect(isActive).to.be.true; + + [contractAddress, isActive] = await registry.getBalancerContract(ContractType.POOL_FACTORY, 'StablePool'); + expect(contractAddress).to.eq(stablePoolFactory.address); + expect(isActive).to.be.true; + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + function _validateInfo(info: any) { + expect(info.contractType).to.eq(ContractType.POOL_FACTORY); + expect(info.isRegistered).to.be.true; + expect(info.isActive).to.be.true; + } +}); From 6610ec4823e8090052631781fe992b70fd687494 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Tue, 4 Mar 2025 10:45:16 -0500 Subject: [PATCH 04/11] update router and add router aliases --- .../20250221-balancer-registry-initializer/index.ts | 4 ++-- .../20250221-balancer-registry-initializer/input.ts | 8 +++++++- .../test/task.fork.ts | 6 +++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/v3/scripts/20250221-balancer-registry-initializer/index.ts b/v3/scripts/20250221-balancer-registry-initializer/index.ts index 54428741b..af1dae3ac 100644 --- a/v3/scripts/20250221-balancer-registry-initializer/index.ts +++ b/v3/scripts/20250221-balancer-registry-initializer/index.ts @@ -11,8 +11,8 @@ export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise [input.Router, input.BatchRouter, input.BufferRouter, input.CompositeLiquidityRouter], [input.WeightedPoolName, input.StablePoolName, input.StableSurgePoolName], [input.WeightedPoolFactory, input.StablePoolFactory, input.StableSurgePoolFactory], - [input.WeightedPoolAlias, input.StablePoolAlias], - [input.WeightedPoolFactory, input.StablePoolFactory], + [input.WeightedPoolAlias, input.StablePoolAlias, input.RouterAlias, input.BatchRouterAlias], + [input.WeightedPoolFactory, input.StablePoolFactory, input.Router, input.BatchRouter], ]; await task.deployAndVerify('BalancerContractRegistryInitializer', args, from, force); diff --git a/v3/scripts/20250221-balancer-registry-initializer/input.ts b/v3/scripts/20250221-balancer-registry-initializer/input.ts index e1017b926..dae896a58 100644 --- a/v3/scripts/20250221-balancer-registry-initializer/input.ts +++ b/v3/scripts/20250221-balancer-registry-initializer/input.ts @@ -19,9 +19,11 @@ export type BalancerContractRegistryInitializerDeployment = { StableSurgePoolFactory: string; WeightedPoolAlias: string; StablePoolAlias: string; + RouterAlias: string; + BatchRouterAlias: string; }; -const RouterName = '20241205-v3-router'; +const RouterName = '20250307-v3-router-v2'; const BatchRouterName = '20241205-v3-batch-router'; const BufferRouterName = '20241205-v3-buffer-router'; const CompositeLiquidityRouterName = '20250123-v3-composite-liquidity-router-v2'; @@ -42,6 +44,8 @@ const StableSurgePoolFactory = new Task(StableSurgePoolName, TaskMode.READ_ONLY) const WeightedPoolAlias = 'WeightedPool'; const StablePoolAlias = 'StablePool'; +const RouterAlias = 'Router'; +const BatchRouterAlias = 'BatchRouter'; export default { Vault, @@ -62,4 +66,6 @@ export default { StableSurgePoolFactory, WeightedPoolAlias, StablePoolAlias, + RouterAlias, + BatchRouterAlias, }; diff --git a/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts b/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts index 4b7d5078b..64cd88b80 100644 --- a/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts +++ b/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts @@ -50,7 +50,7 @@ describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, fun const registryTask = new Task('20250117-v3-contract-registry', TaskMode.READ_ONLY, getForkedNetwork(hre)); registry = await registryTask.deployedInstance('BalancerContractRegistry'); - const routerTask = new Task('20241205-v3-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); + const routerTask = new Task('20250307-v3-router-v2', TaskMode.READ_ONLY, getForkedNetwork(hre)); router = await routerTask.deployedInstance('Router'); const batchRouterTask = new Task('20241205-v3-batch-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); @@ -130,6 +130,10 @@ describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, fun [contractAddress, isActive] = await registry.getBalancerContract(ContractType.POOL_FACTORY, 'StablePool'); expect(contractAddress).to.eq(stablePoolFactory.address); expect(isActive).to.be.true; + + [contractAddress, isActive] = await registry.getBalancerContract(ContractType.ROUTER, 'Router'); + expect(contractAddress).to.eq(router.address); + expect(isActive).to.be.true; }); // eslint-disable-next-line @typescript-eslint/no-explicit-any From 01d1af5f05e970ac0ad8765b180a91191f5c97e2 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Tue, 4 Mar 2025 10:58:23 -0500 Subject: [PATCH 05/11] add readme entry for the script --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 06bf1838c..2ce9fc38b 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,7 @@ These are deployments for script-like contracts (often called 'coordinators') wh | Coordination of the Gauge Adder migration V2 --> V3 | [`20230109-gauge-adder-migration-v2-to-v3`](./v2/scripts/20230109-gauge-adder-migration-v2-to-v3) | | Timelock authorizer transition permission migration | [`20230130-ta-transition-migrator`](./v2/scripts/20230130-ta-transition-migrator) | | Coordination of the Gauge Adder migration V3 --> V4 | [`20230519-gauge-adder-migration-v3-to-v4`](./v2/scripts/20230519-gauge-adder-migration-v3-to-v4) | +| Balancer Contract Registry Initializer | [`20250314-balancer-registry-initializer`](./v2/scripts/20250314-balancer-registry-initializer) | ## Deprecated Deployments From b641e2b389a933579d9a5aa451f81aab4896ed23 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Tue, 4 Mar 2025 10:58:43 -0500 Subject: [PATCH 06/11] update the date to be more realistic --- .../artifact/BalancerContractRegistryInitializer.json | 0 .../build-info/BalancerContractRegistryInitializer.json | 0 .../index.ts | 0 .../input.ts | 0 .../readme.md | 2 +- .../test/task.fork.ts | 2 +- 6 files changed, 2 insertions(+), 2 deletions(-) rename v3/scripts/{20250221-balancer-registry-initializer => 20250314-balancer-registry-initializer}/artifact/BalancerContractRegistryInitializer.json (100%) rename v3/scripts/{20250221-balancer-registry-initializer => 20250314-balancer-registry-initializer}/build-info/BalancerContractRegistryInitializer.json (100%) rename v3/scripts/{20250221-balancer-registry-initializer => 20250314-balancer-registry-initializer}/index.ts (100%) rename v3/scripts/{20250221-balancer-registry-initializer => 20250314-balancer-registry-initializer}/input.ts (100%) rename v3/scripts/{20250221-balancer-registry-initializer => 20250314-balancer-registry-initializer}/readme.md (82%) rename v3/scripts/{20250221-balancer-registry-initializer => 20250314-balancer-registry-initializer}/test/task.fork.ts (98%) diff --git a/v3/scripts/20250221-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json b/v3/scripts/20250314-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json similarity index 100% rename from v3/scripts/20250221-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json rename to v3/scripts/20250314-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json diff --git a/v3/scripts/20250221-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json b/v3/scripts/20250314-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json similarity index 100% rename from v3/scripts/20250221-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json rename to v3/scripts/20250314-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json diff --git a/v3/scripts/20250221-balancer-registry-initializer/index.ts b/v3/scripts/20250314-balancer-registry-initializer/index.ts similarity index 100% rename from v3/scripts/20250221-balancer-registry-initializer/index.ts rename to v3/scripts/20250314-balancer-registry-initializer/index.ts diff --git a/v3/scripts/20250221-balancer-registry-initializer/input.ts b/v3/scripts/20250314-balancer-registry-initializer/input.ts similarity index 100% rename from v3/scripts/20250221-balancer-registry-initializer/input.ts rename to v3/scripts/20250314-balancer-registry-initializer/input.ts diff --git a/v3/scripts/20250221-balancer-registry-initializer/readme.md b/v3/scripts/20250314-balancer-registry-initializer/readme.md similarity index 82% rename from v3/scripts/20250221-balancer-registry-initializer/readme.md rename to v3/scripts/20250314-balancer-registry-initializer/readme.md index 203373f2c..2136abba1 100644 --- a/v3/scripts/20250221-balancer-registry-initializer/readme.md +++ b/v3/scripts/20250314-balancer-registry-initializer/readme.md @@ -1,4 +1,4 @@ -# 2025-02-21 - V3 Balancer Contract Registry Initializer +# 2025-03-14 - V3 Balancer Contract Registry Initializer Deployment of the `BalancerContractRegistryInitializer`, responsible for populating the registry with routers and pool factories (and initial aliases). diff --git a/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts b/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts similarity index 98% rename from v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts rename to v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts index 64cd88b80..7c8d010d9 100644 --- a/v3/scripts/20250221-balancer-registry-initializer/test/task.fork.ts +++ b/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts @@ -38,7 +38,7 @@ describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, fun } before('run task', async () => { - task = new Task('20250221-balancer-registry-initializer', TaskMode.TEST, getForkedNetwork(hre)); + task = new Task('20250314-balancer-registry-initializer', TaskMode.TEST, getForkedNetwork(hre)); await task.run({ force: true }); registryInitializer = await task.deployedInstance('BalancerContractRegistryInitializer'); }); From 6c7d74e434388c90ec498a4c243ff23bf76cfba1 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Tue, 4 Mar 2025 16:30:38 -0500 Subject: [PATCH 07/11] add LBPoolFactory --- v3/scripts/20250314-balancer-registry-initializer/index.ts | 4 ++-- v3/scripts/20250314-balancer-registry-initializer/input.ts | 6 ++++++ .../test/task.fork.ts | 7 +++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/v3/scripts/20250314-balancer-registry-initializer/index.ts b/v3/scripts/20250314-balancer-registry-initializer/index.ts index af1dae3ac..95dd4f29c 100644 --- a/v3/scripts/20250314-balancer-registry-initializer/index.ts +++ b/v3/scripts/20250314-balancer-registry-initializer/index.ts @@ -9,8 +9,8 @@ export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise input.BalancerContractRegistry, [input.RouterName, input.BatchRouterName, input.BufferRouterName, input.CompositeLiquidityRouterName], [input.Router, input.BatchRouter, input.BufferRouter, input.CompositeLiquidityRouter], - [input.WeightedPoolName, input.StablePoolName, input.StableSurgePoolName], - [input.WeightedPoolFactory, input.StablePoolFactory, input.StableSurgePoolFactory], + [input.WeightedPoolName, input.StablePoolName, input.StableSurgePoolName, input.LBPoolName], + [input.WeightedPoolFactory, input.StablePoolFactory, input.StableSurgePoolFactory, input.LBPoolFactory], [input.WeightedPoolAlias, input.StablePoolAlias, input.RouterAlias, input.BatchRouterAlias], [input.WeightedPoolFactory, input.StablePoolFactory, input.Router, input.BatchRouter], ]; diff --git a/v3/scripts/20250314-balancer-registry-initializer/input.ts b/v3/scripts/20250314-balancer-registry-initializer/input.ts index dae896a58..4bca87ff9 100644 --- a/v3/scripts/20250314-balancer-registry-initializer/input.ts +++ b/v3/scripts/20250314-balancer-registry-initializer/input.ts @@ -17,6 +17,8 @@ export type BalancerContractRegistryInitializerDeployment = { StablePoolFactory: string; StableSurgePoolName: string; StableSurgePoolFactory: string; + LBPoolName: string; + LBPoolFactory: string; WeightedPoolAlias: string; StablePoolAlias: string; RouterAlias: string; @@ -30,6 +32,7 @@ const CompositeLiquidityRouterName = '20250123-v3-composite-liquidity-router-v2' const WeightedPoolName = '20241205-v3-weighted-pool'; const StablePoolName = '20241205-v3-stable-pool'; const StableSurgePoolName = '20250121-v3-stable-surge'; +const LBPoolName = '20250307-v3-liquidity-bootstrapping-pool'; const Vault = new Task('20241204-v3-vault', TaskMode.READ_ONLY); const BalancerContractRegistry = new Task('20250117-v3-contract-registry', TaskMode.READ_ONLY); @@ -41,6 +44,7 @@ const CompositeLiquidityRouter = new Task(CompositeLiquidityRouterName, TaskMode const WeightedPoolFactory = new Task(WeightedPoolName, TaskMode.READ_ONLY); const StablePoolFactory = new Task(StablePoolName, TaskMode.READ_ONLY); const StableSurgePoolFactory = new Task(StableSurgePoolName, TaskMode.READ_ONLY); +const LBPoolFactory = new Task(LBPoolName, TaskMode.READ_ONLY); const WeightedPoolAlias = 'WeightedPool'; const StablePoolAlias = 'StablePool'; @@ -64,6 +68,8 @@ export default { StablePoolFactory, StableSurgePoolName, StableSurgePoolFactory, + LBPoolName, + LBPoolFactory, WeightedPoolAlias, StablePoolAlias, RouterAlias, diff --git a/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts b/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts index 7c8d010d9..fc0e74233 100644 --- a/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts +++ b/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts @@ -24,6 +24,7 @@ describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, fun let weightedPoolFactory: Contract; let stablePoolFactory: Contract; let stableSurgePoolFactory: Contract; + let lbpFactory: Contract; let task: Task; @@ -70,6 +71,9 @@ describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, fun const stableSurgePoolTask = new Task('20250121-v3-stable-surge', TaskMode.READ_ONLY, getForkedNetwork(hre)); stableSurgePoolFactory = await stableSurgePoolTask.deployedInstance('StableSurgePoolFactory'); + + const lbpFactoryTask = new Task('20250307-v3-liquidity-bootstrapping-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); + lbpFactory = await lbpFactoryTask.deployedInstance('LBPoolFactory'); }); before('grant permissions', async () => { @@ -120,6 +124,9 @@ describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, fun info = await registry.getBalancerContractInfo(stableSurgePoolFactory.address); _validateInfo(info); + + info = await registry.getBalancerContractInfo(lbpFactory.address); + _validateInfo(info); }); it('has registered the aliases', async () => { From 4a321344351d02fc604745fa8e52b801591189b5 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Tue, 4 Mar 2025 16:48:23 -0500 Subject: [PATCH 08/11] lint --- .../test/task.fork.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts b/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts index fc0e74233..c60b26f5c 100644 --- a/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts +++ b/v3/scripts/20250314-balancer-registry-initializer/test/task.fork.ts @@ -72,7 +72,11 @@ describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, fun const stableSurgePoolTask = new Task('20250121-v3-stable-surge', TaskMode.READ_ONLY, getForkedNetwork(hre)); stableSurgePoolFactory = await stableSurgePoolTask.deployedInstance('StableSurgePoolFactory'); - const lbpFactoryTask = new Task('20250307-v3-liquidity-bootstrapping-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); + const lbpFactoryTask = new Task( + '20250307-v3-liquidity-bootstrapping-pool', + TaskMode.READ_ONLY, + getForkedNetwork(hre) + ); lbpFactory = await lbpFactoryTask.deployedInstance('LBPoolFactory'); }); From 662a3ef7488421966b932e834d9fc7798ccb733d Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Tue, 4 Mar 2025 16:53:14 -0500 Subject: [PATCH 09/11] v2 -> v3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 08b9fe7f0..1e1e398bd 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ These are deployments for script-like contracts (often called 'coordinators') wh | Coordination of the Gauge Adder migration V2 --> V3 | [`20230109-gauge-adder-migration-v2-to-v3`](./v2/scripts/20230109-gauge-adder-migration-v2-to-v3) | | Timelock authorizer transition permission migration | [`20230130-ta-transition-migrator`](./v2/scripts/20230130-ta-transition-migrator) | | Coordination of the Gauge Adder migration V3 --> V4 | [`20230519-gauge-adder-migration-v3-to-v4`](./v2/scripts/20230519-gauge-adder-migration-v3-to-v4) | -| Balancer Contract Registry Initializer | [`20250314-balancer-registry-initializer`](./v2/scripts/20250314-balancer-registry-initializer) | +| Balancer Contract Registry Initializer | [`20250314-balancer-registry-initializer`](./v3/scripts/20250314-balancer-registry-initializer) | ## Deprecated Deployments From 2263c916fff62feacdd7acc24250dd6034a26d0f Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Tue, 11 Mar 2025 00:04:09 -0400 Subject: [PATCH 10/11] add final commit --- v3/scripts/20250314-balancer-registry-initializer/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/v3/scripts/20250314-balancer-registry-initializer/readme.md b/v3/scripts/20250314-balancer-registry-initializer/readme.md index 2136abba1..06bed6731 100644 --- a/v3/scripts/20250314-balancer-registry-initializer/readme.md +++ b/v3/scripts/20250314-balancer-registry-initializer/readme.md @@ -4,4 +4,5 @@ Deployment of the `BalancerContractRegistryInitializer`, responsible for populat ## Useful Files +- [Code](https://github.com/balancer/balancer-v3-monorepo/commit/e1ae7f091244ae20e5c1add3e7f89b6d33f48d23). - [`BalancerContractRegistryInitializer` artifact](./artifact/BalancerContractRegistryInitializer.json) From 7e08bcb93bd6a183fb76f965e79c7b8d75fe673e Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Wed, 12 Mar 2025 17:55:04 -0400 Subject: [PATCH 11/11] update artifacts --- .../BalancerContractRegistryInitializer.json | 18 +++++++++--------- .../BalancerContractRegistryInitializer.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/v3/scripts/20250314-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json b/v3/scripts/20250314-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json index bc7c96efc..ef8b5fc64 100644 --- a/v3/scripts/20250314-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json +++ b/v3/scripts/20250314-balancer-registry-initializer/artifact/BalancerContractRegistryInitializer.json @@ -12,37 +12,37 @@ }, { "internalType": "contract IBalancerContractRegistry", - "name": "_balancerContractRegistry", + "name": "balancerContractRegistry_", "type": "address" }, { "internalType": "string[]", - "name": "_routerNames", + "name": "routerNames", "type": "string[]" }, { "internalType": "address[]", - "name": "_routerAddresses", + "name": "routerAddresses", "type": "address[]" }, { "internalType": "string[]", - "name": "_poolFactoryNames", + "name": "poolFactoryNames", "type": "string[]" }, { "internalType": "address[]", - "name": "_poolFactoryAddresses", + "name": "poolFactoryAddresses", "type": "address[]" }, { "internalType": "string[]", - "name": "_aliasNames", + "name": "aliasNames", "type": "string[]" }, { "internalType": "address[]", - "name": "_aliasAddresses", + "name": "aliasAddresses", "type": "address[]" } ], @@ -85,8 +85,8 @@ "type": "function" } ], - "bytecode": "0x60c0604090808252346103b5576115c6803803809161001e8285610975565b8339810190610100818303126103b55761003781610998565b60208201516001600160a01b039391928482169290918381036103b557828701516001600160401b0381116103b557826100729185016109c3565b60608401516001600160401b0381116103b55783610091918601610a88565b60808501519091906001600160401b0381116103b557846100b39187016109c3565b60a08601519093906001600160401b0381116103b557856100d5918801610a88565b60c08701519095906001600160401b0381116103b557816100f79189016109c3565b60e088015190976001600160401b0382116103b55760049260209261011c9201610a88565b9861012a8551875190610b47565b6101378751895190610b47565b61014489518b5190610b47565b8c516311b2515f60e31b815292839182905afa90811561096b575f91610931575b5089808a169116036109225760805280519068010000000000000000821161040157600154826001558083106108a6575b5060015f9081525f5160206115a65f395f51905f5292916020015b82821061079f5750508251929150506001600160401b038211610401576801000000000000000082116104015760209060025483600255808410610783575b500160025f5260205f205f5b83811061076d575050505080519068010000000000000000821161040157600354826003558083106106f1575b5060035f9081525f5160206115865f395f51905f5292916020015b8282106105e05750508251929150506001600160401b0382116104015768010000000000000000821161040157602090600454836004558084106105c4575b500160045f5260205f205f5b8381106105ae57505050508051906801000000000000000082116104015760055482600555808310610532575b5060055f9081525f5160206115665f395f51905f5292916020015b8282106104155750508251929150506001600160401b0382116104015768010000000000000000821161040157602090600654836006558084106103e5575b5090849392910160065f5260205f205f5b8381106103cb5750505050602090600485518094819363aaabadc560e01b8352165afa9081156103c1575f91610382575b501660a05251610a089081610b5e823960805181818160b3015261083e015260a051816101830152f35b90506020813d6020116103b9575b8161039d60209383610975565b810103126103b5575181811681036103b5575f610358565b5f80fd5b3d9150610390565b83513d5f823e3d90fd5b825190951685820155859460209290920191600101610327565b6103fb9060065f5284845f209182019101610b31565b5f610316565b634e487b7160e01b5f52604160045260245ffd5b80518051906001600160401b038211610401576104328654610af9565b90601f918281116104fa575b50602091831160011461048e5792610474836001959460209487965f92610483575b50508160011b915f199060031b1c19161790565b87555b019401910190926102d7565b015190505f80610460565b90865f5260205f20915f5b601f19851681106104e2575083602093600196938796938794601f198116106104ca575b505050811b018755610477565b01515f1960f88460031b161c191690555f80806104bd565b91926020600181928685015181550194019201610499565b61052390885f5260205f208480870160051c82019260208810610529575b0160051c0190610b31565b5f61043e565b92508192610518565b60055f525f5160206115665f395f51905f529081019083015b81811061055857506102bc565b8061056560019254610af9565b80610572575b500161054b565b601f90818111841461058a5750505f81555b5f61056b565b6105a55f9284845260208420920160051c8201858301610b31565b81835555610584565b600190602089855116940193818401550161028f565b6105da9060045f5284845f209182019101610b31565b5f610283565b80518051906001600160401b038211610401576105fd8654610af9565b90601f918281116106b9575b50602091831160011461064d579261063e836001959460209487965f926104835750508160011b915f199060031b1c19161790565b87555b01940191019092610244565b90865f5260205f20915f5b601f19851681106106a1575083602093600196938796938794601f19811610610689575b505050811b018755610641565b01515f1960f88460031b161c191690555f808061067c565b91926020600181928685015181550194019201610658565b6106e290885f5260205f20600585808801821c830193602089106106e8575b01901c0190610b31565b5f610609565b935082936106d8565b60035f525f5160206115865f395f51905f529081019083015b8181106107175750610229565b8061072460019254610af9565b80610731575b500161070a565b601f9081811184146107495750505f81555b5f61072a565b6107645f9284845260208420920160051c8201858301610b31565b81835555610743565b60019060208b85511694019381840155016101fc565b6107999060025f5284845f209182019101610b31565b5f6101f0565b80518051906001600160401b038211610401576107bc8654610af9565b90601f91828111610878575b50602091831160011461080c57926107fd836001959460209487965f926104835750508160011b915f199060031b1c19161790565b87555b019401910190926101b1565b90865f5260205f20915f5b601f1985168110610860575083602093600196938796938794601f19811610610848575b505050811b018755610800565b01515f1960f88460031b161c191690555f808061083b565b91926020600181928685015181550194019201610817565b6108a090885f5260205f20600585808801821c830193602089106106e85701901c0190610b31565b5f6107c8565b60015f525f5160206115a65f395f51905f529081019083015b8181106108cc5750610196565b806108d960019254610af9565b806108e6575b50016108bf565b601f9081811184146108fe5750505f81555b5f6108df565b6109195f9284845260208420920160051c8201858301610b31565b818355556108f8565b63c1faacc560e01b5f5260045ffd5b90506020813d602011610963575b8161094c60209383610975565b810103126103b55761095d90610998565b5f610165565b3d915061093f565b8b513d5f823e3d90fd5b601f909101601f19168101906001600160401b0382119082101761040157604052565b51906001600160a01b03821682036103b557565b6001600160401b0381116104015760051b60200190565b601f9180601f830112156103b5578151916020926109e0816109ac565b946040936109f16040519788610975565b828752858088019360051b850101948186116103b557868501935b868510610a1e57505050505050505090565b84516001600160401b0391908281116103b55787019084603f830112156103b55789820151928311610401578351610a5e848801601f19168c0182610975565b838152858585850101116103b5575f8b858196888397018386015e83010152815201940193610a0c565b9080601f830112156103b557815190602091610aa3816109ac565b93610ab16040519586610975565b81855260208086019260051b8201019283116103b557602001905b828210610ada575050505090565b81516001600160a01b03811681036103b5578152908301908301610acc565b90600182811c92168015610b27575b6020831014610b1357565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610b08565b818110610b3c575050565b5f8155600101610b31565b03610b4e57565b63aaad13f760e01b5f5260045ffdfe6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea26469706673582212204c39ba673968bc422cef5a162adb229b4e53181cb83169db1195dd070115938064736f6c634300081b0033036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85bb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", - "deployedBytecode": "0x6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea26469706673582212204c39ba673968bc422cef5a162adb229b4e53181cb83169db1195dd070115938064736f6c634300081b0033", + "bytecode": "0x60c080604052346103ce576115de803803809161001c828561098d565b8339810190610100818303126103ce57610035816109b0565b6020820151909290916001600160a01b03831683036103ce5760408101516001600160401b0381116103ce578261006d9183016109db565b60608201519093906001600160401b0381116103ce578361008f918401610aa0565b60808301516001600160401b0381116103ce57846100ae9185016109db565b60a08401519092906001600160401b0381116103ce57856100d0918601610aa0565b60c08501519094906001600160401b0381116103ce57866100f29183016109db565b60e08201519096906001600160401b0381116103ce576101129201610aa0565b956001549161012360025484610b5f565b61013260035460045490610b5f565b61014160055460065490610b5f565b6040516311b2515f60e31b81526020816004816001600160a01b0386165afa9081156103da575f91610953575b506001600160a01b038a81169116036109445760805280519168010000000000000000831161041e57826001558083106108c7575b5060015f9081525f5160206115be5f395f51905f5292916020015b8282106107c05750508251929150506001600160401b03821161041e5768010000000000000000821161041e57602090600254836002558084106107a4575b500160025f5260205f205f5b838110610787575050505080519068010000000000000000821161041e576003548260035580831061070b575b5060035f9081525f51602061159e5f395f51905f5292916020015b8282106106045750508251929150506001600160401b03821161041e5768010000000000000000821161041e57602090600454836004558084106105e8575b500160045f5260205f205f5b8381106105cb575050505080519068010000000000000000821161041e576005548260055580831061054f575b5060055f9081525f51602061157e5f395f51905f5292916020015b8282106104325784518690866001600160401b03821161041e5768010000000000000000821161041e5760209060065483600655808410610402575b500160065f5260205f205f5b8381106103e55760405163aaabadc560e01b81526020816004816001600160a01b038a165afa9081156103da575f91610394575b506001600160a01b031660a052604051610a089081610b76823960805181818160b3015261083e015260a051816101830152f35b90506020813d6020116103d2575b816103af6020938361098d565b810103126103ce57516001600160a01b03811681036103ce5781610360565b5f80fd5b3d91506103a2565b6040513d5f823e3d90fd5b82516001600160a01b03168183015560209092019160010161032c565b6104189060065f5284845f209182019101610b49565b84610320565b634e487b7160e01b5f52604160045260245ffd5b80518051906001600160401b03821161041e5761044f8654610b11565b90601f91828111610517575b5060209183116001146104ab5792610491836001959460209487965f926104a0575b50508160011b915f199060031b1c19161790565b87555b019401910190926102e4565b015190505f8061047d565b90865f5260205f20915f5b601f19851681106104ff575083602093600196938796938794601f198116106104e7575b505050811b018755610494565b01515f1960f88460031b161c191690555f80806104da565b919260206001819286850151815501940192016104b6565b61054090885f5260205f208480870160051c82019260208810610546575b0160051c0190610b49565b5f61045b565b92508192610535565b60055f525f51602061157e5f395f51905f529081019083015b81811061057557506102c9565b8061058260019254610b11565b8061058f575b5001610568565b601f9081811184146105a75750505f81555b5f610588565b6105c25f9284845260208420920160051c8201858301610b49565b818355556105a1565b82516001600160a01b03168183015560209092019160010161029c565b6105fe9060045f5284845f209182019101610b49565b5f610290565b80518051906001600160401b03821161041e576106218654610b11565b90601f918281116106dd575b5060209183116001146106715792610662836001959460209487965f926104a05750508160011b915f199060031b1c19161790565b87555b01940191019092610251565b90865f5260205f20915f5b601f19851681106106c5575083602093600196938796938794601f198116106106ad575b505050811b018755610665565b01515f1960f88460031b161c191690555f80806106a0565b9192602060018192868501518155019401920161067c565b61070590885f5260205f208480870160051c82019260208810610546570160051c0190610b49565b5f61062d565b60035f525f51602061159e5f395f51905f529081019083015b8181106107315750610236565b8061073e60019254610b11565b8061074b575b5001610724565b601f9081811184146107635750505f81555b5f610744565b61077e5f9284845260208420920160051c8201858301610b49565b8183555561075d565b82516001600160a01b031681830155602090920191600101610209565b6107ba9060025f5284845f209182019101610b49565b5f6101fd565b80518051906001600160401b03821161041e576107dd8654610b11565b90601f91828111610899575b50602091831160011461082d579261081e836001959460209487965f926104a05750508160011b915f199060031b1c19161790565b87555b019401910190926101be565b90865f5260205f20915f5b601f1985168110610881575083602093600196938796938794601f19811610610869575b505050811b018755610821565b01515f1960f88460031b161c191690555f808061085c565b91926020600181928685015181550194019201610838565b6108c190885f5260205f208480870160051c82019260208810610546570160051c0190610b49565b5f6107e9565b60015f525f5160206115be5f395f51905f52908382015b81830181106108ee5750506101a3565b806108fb60019254610b11565b80610908575b50016108de565b601f9081811184146109205750505f81555b5f610901565b61093b5f9284845260208420920160051c8201858301610b49565b8183555561091a565b63c1faacc560e01b5f5260045ffd5b90506020813d602011610985575b8161096e6020938361098d565b810103126103ce5761097f906109b0565b5f61016e565b3d9150610961565b601f909101601f19168101906001600160401b0382119082101761041e57604052565b51906001600160a01b03821682036103ce57565b6001600160401b03811161041e5760051b60200190565b601f9180601f830112156103ce578151916020926109f8816109c4565b94604093610a09604051978861098d565b828752858088019360051b850101948186116103ce57868501935b868510610a3657505050505050505090565b84516001600160401b0391908281116103ce5787019084603f830112156103ce578982015192831161041e578351610a76848801601f19168c018261098d565b838152858585850101116103ce575f8b858196888397018386015e83010152815201940193610a24565b9080601f830112156103ce57815190602091610abb816109c4565b93610ac9604051958661098d565b81855260208086019260051b8201019283116103ce57602001905b828210610af2575050505090565b81516001600160a01b03811681036103ce578152908301908301610ae4565b90600182811c92168015610b3f575b6020831014610b2b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610b20565b818110610b54575050565b5f8155600101610b49565b03610b6657565b63aaad13f760e01b5f5260045ffdfe6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea2646970667358221220bcd1f81e81572872cd468bd1531ecdcb70ca7c4183202d58ae7bb548f1ddb03564736f6c634300081b0033036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85bb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6", + "deployedBytecode": "0x6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea2646970667358221220bcd1f81e81572872cd468bd1531ecdcb70ca7c4183202d58ae7bb548f1ddb03564736f6c634300081b0033", "linkReferences": {}, "deployedLinkReferences": {} } \ No newline at end of file diff --git a/v3/scripts/20250314-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json b/v3/scripts/20250314-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json index e0824c37f..797969d06 100644 --- a/v3/scripts/20250314-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json +++ b/v3/scripts/20250314-balancer-registry-initializer/build-info/BalancerContractRegistryInitializer.json @@ -1 +1 @@ -{"id":"d6ce1928928b603b11d26c0f6490ddc9","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Registered contracts must be one of these types.\nenum ContractType {\n OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case\n POOL_FACTORY,\n ROUTER,\n HOOK,\n ERC4626\n}\n\ninterface IBalancerContractRegistry {\n /**\n * @notice Store the state of a registered Balancer contract.\n * @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n * differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n * only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n * the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n * things that don't find into the standard types (e.g., helper contracts).\n *\n * @param contractType The type of contract (e.g., Router or Hook)\n * @param isRegistered This flag indicates whether there is an entry for the associated address\n * @param isActive If there is an entry, this flag indicates whether it is active or deprecated\n */\n struct ContractInfo {\n ContractType contractType;\n bool isRegistered;\n bool isActive;\n }\n\n /**\n * @notice Emitted when a new contract is registered.\n * @param contractType The type of contract being registered\n * @param contractName The name of the contract being registered\n * @param contractAddress The address of the contract being registered\n */\n event BalancerContractRegistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a new contract is deregistered (deleted).\n * @param contractType The type of contract being deregistered\n * @param contractName The name of the contract being deregistered\n * @param contractAddress The address of the contract being deregistered\n */\n event BalancerContractDeregistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a registered contract is deprecated.\n * @dev This sets the `isActive` flag to false.\n * @param contractAddress The address of the contract being deprecated\n */\n event BalancerContractDeprecated(address indexed contractAddress);\n\n /**\n * @notice Emitted when an alias is added or updated.\n * @param contractAlias The alias name\n * @param contractAddress The address of the contract being deprecated\n */\n event ContractAliasUpdated(string indexed contractAlias, address indexed contractAddress);\n\n /**\n * @notice A contract has already been registered under the given address.\n * @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n * to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n * name => address => state mapping.\n *\n * @param contractType The contract type, provided for documentation purposes\n * @param contractAddress The address of the previously registered contract\n */\n error ContractAddressAlreadyRegistered(ContractType contractType, address contractAddress);\n\n /**\n * @notice A contract has already been registered under the given name.\n * @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n * different types, or the same name and different addresses.\n *\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract\n */\n error ContractNameAlreadyRegistered(ContractType contractType, string contractName);\n\n /**\n * @notice The proposed contract name has already been added as an alias.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractName The name of the previously registered contract\n * @param contractAddress The address of the previously registered contract\n */\n error ContractNameInUseAsAlias(string contractName, address contractAddress);\n\n /**\n * @notice The proposed alias has already been registered as a contract.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract (and proposed alias)\n */\n error ContractAliasInUseAsName(ContractType contractType, string contractName);\n\n /**\n * @notice Thrown when attempting to deregister a contract that was not previously registered.\n * @param contractName The name of the unregistered contract\n */\n error ContractNameNotRegistered(string contractName);\n\n /**\n * @notice An operation that requires a valid contract specified an unrecognized address.\n * @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n * registered contract.\n *\n * @param contractAddress The address of the contract that was not registered\n */\n error ContractAddressNotRegistered(address contractAddress);\n\n /**\n * @notice Contracts can only be deprecated once.\n * @param contractAddress The address of the previously deprecated contract\n */\n error ContractAlreadyDeprecated(address contractAddress);\n\n /// @notice Cannot register or deprecate contracts, or add an alias targeting the zero address.\n error ZeroContractAddress();\n\n /// @notice Cannot register (or deregister) a contract with an empty string as a name.\n error InvalidContractName();\n\n /// @notice Cannot add an empty string as an alias.\n error InvalidContractAlias();\n\n /**\n * @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n * (not blank). Governance must ensure this is called with valid information. Emits the\n * `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n * already in use.\n *\n * @param contractType The type of contract being registered\n * @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n * @param contractAddress The address of the contract\n */\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external;\n\n /**\n * @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n * If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n * it, and register it again with the correct data. It must start with the name, as this is the registry key,\n * required for complete deletion.\n *\n * Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n * inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n * the correct address.\n *\n * @param contractName The name of the contract being deprecated (cannot be an alias)\n */\n function deregisterBalancerContract(string memory contractName) external;\n\n /**\n * @notice Deprecate an official Balancer contract.\n * @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n * address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n * enforced unique, so either the name or address could be specified in principle.\n *\n * @param contractAddress The address of the contract being deprecated\n */\n function deprecateBalancerContract(address contractAddress) external;\n\n /**\n * @notice Add an alias for a registered contract.\n * @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n * `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n * need to track specific versions. Once added, an alias can also be updated to point to a different address\n * (e.g., when migrating from the v2 to the v3 weighted pool).\n *\n * @param contractAlias An alternate name that can be used to fetch a contract address\n * @param existingContract The target address of the contract alias\n */\n function addOrUpdateBalancerContractAlias(string memory contractAlias, address existingContract) external;\n\n /**\n * @notice Determine whether an address is an official contract of the specified type.\n * @param contractType The type of contract\n * @param contractAddress The address of the contract\n * @return isActive True if the given address is a registered and active contract of the specified type\n */\n function isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) external view returns (bool isActive);\n\n /**\n * @notice Look up a registered contract by type and name.\n * @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n * (e.g., `WeightedPool`).\n *\n * @param contractType The type of the contract\n * @param contractName The name of the contract\n * @return contractAddress The address of the associated contract, if registered, or zero\n * @return isActive True if the contract was registered and not deprecated\n */\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive);\n\n /**\n * @notice Look up complete information about a registered contract by address.\n * @param contractAddress The address of the associated contract\n * @return info ContractInfo struct corresponding to the address\n */\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info);\n\n /// @notice Returns `true` if the given address is an active contract under the ROUTER type.\n function isTrustedRouter(address router) external view returns (bool);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is Authentication {\n IVault private immutable _vault;\n\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) Authentication(bytes32(uint256(uint160(address(this))))) {\n _vault = vault;\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n\n function _canPerform(bytes32 actionId, address account) internal view override returns (bool) {\n return getAuthorizer().canPerform(actionId, account, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return getAuthorizer().canPerform(actionId, account, where);\n }\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"contracts/BalancerContractRegistryInitializer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\n\nimport { IBasicAuthorizer } from \"./IBasicAuthorizer.sol\";\n\n// Associated with `20250221-balancer-registry-initializer`.\ncontract BalancerContractRegistryInitializer {\n IBalancerContractRegistry public immutable balancerContractRegistry;\n\n // IAuthorizer with interface for granting/revoking roles.\n IBasicAuthorizer internal immutable _authorizer;\n\n // Set to true when operation is complete.\n bool private _initialized;\n\n string[] private routerNames;\n address[] private routerAddresses;\n\n string[] private poolFactoryNames;\n address[] private poolFactoryAddresses;\n\n string[] private aliasNames;\n address[] private aliasAddresses;\n\n /// @notice The initialization can only be done once.\n error AlreadyInitialized();\n\n /// @notice The Vault passed in as a sanity check doesn't match the Vault associated with the registry.\n error VaultMismatch();\n\n constructor(\n IVault vault,\n IBalancerContractRegistry _balancerContractRegistry,\n string[] memory _routerNames,\n address[] memory _routerAddresses,\n string[] memory _poolFactoryNames,\n address[] memory _poolFactoryAddresses,\n string[] memory _aliasNames,\n address[] memory _aliasAddresses\n ) {\n InputHelpers.ensureInputLengthMatch(_routerNames.length, _routerAddresses.length);\n InputHelpers.ensureInputLengthMatch(_poolFactoryNames.length, _poolFactoryAddresses.length);\n InputHelpers.ensureInputLengthMatch(_aliasNames.length, _aliasAddresses.length);\n\n // Extract the Vault (also indirectly verifying the registry contract is valid).\n IVault registryVault = SingletonAuthentication(address(_balancerContractRegistry)).getVault();\n if (registryVault != vault) {\n revert VaultMismatch();\n }\n\n balancerContractRegistry = _balancerContractRegistry;\n\n routerNames = _routerNames;\n routerAddresses = _routerAddresses;\n poolFactoryNames = _poolFactoryNames;\n poolFactoryAddresses = _poolFactoryAddresses;\n aliasNames = _aliasNames;\n aliasAddresses = _aliasAddresses;\n\n _authorizer = IBasicAuthorizer(address(vault.getAuthorizer()));\n }\n\n function initializeBalancerContractRegistry() external {\n // Explicitly ensure this can only be called once.\n if (_initialized) {\n revert AlreadyInitialized();\n }\n\n _initialized = true;\n\n // Grant permissions to register contracts and add aliases.\n bytes32 registerContractRole = IAuthentication(address(balancerContractRegistry)).getActionId(\n IBalancerContractRegistry.registerBalancerContract.selector\n );\n bytes32 addAliasRole = IAuthentication(address(balancerContractRegistry)).getActionId(\n IBalancerContractRegistry.addOrUpdateBalancerContractAlias.selector\n );\n\n _authorizer.grantRole(registerContractRole, address(this));\n _authorizer.grantRole(addAliasRole, address(this));\n\n // Add Routers.\n for (uint256 i = 0; i < routerNames.length; ++i) {\n balancerContractRegistry.registerBalancerContract(ContractType.ROUTER, routerNames[i], routerAddresses[i]);\n }\n\n // Add Pool Factories.\n for (uint256 i = 0; i < poolFactoryNames.length; ++i) {\n balancerContractRegistry.registerBalancerContract(\n ContractType.POOL_FACTORY,\n poolFactoryNames[i],\n poolFactoryAddresses[i]\n );\n }\n\n // Add (pool factory) aliases.\n for (uint256 i = 0; i < aliasNames.length; ++i) {\n balancerContractRegistry.addOrUpdateBalancerContractAlias(aliasNames[i], aliasAddresses[i]);\n }\n\n // Renounce all roles.\n _authorizer.renounceRole(registerContractRole, address(this));\n _authorizer.renounceRole(addAliasRole, address(this));\n\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n}\n"},"contracts/IBasicAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\n\ninterface IBasicAuthorizer is IAuthorizer {\n // solhint-disable-next-line func-name-mixedcase\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"sources":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[14]},"id":15,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":2,"nodeType":"StructuredDocumentation","src":"72:77:0","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":14,"linearizedBaseContracts":[14],"name":"IAuthentication","nameLocation":"159:15:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"181:67:0","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":5,"name":"SenderNotAllowed","nameLocation":"259:16:0","nodeType":"ErrorDefinition","parameters":{"id":4,"nodeType":"ParameterList","parameters":[],"src":"275:2:0"},"src":"253:25:0"},{"documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"284:237:0","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":13,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:0","nodeType":"FunctionDefinition","parameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"selector","nameLocation":"554:8:0","nodeType":"VariableDeclaration","scope":13,"src":"547:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":7,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:0","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:0"},"returnParameters":{"id":12,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11,"mutability":"mutable","name":"actionId","nameLocation":"595:8:0","nodeType":"VariableDeclaration","scope":13,"src":"587:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:0"},"scope":14,"src":"526:79:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":15,"src":"149:458:0","usedErrors":[5],"usedEvents":[]}],"src":"46:562:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[24]},"id":25,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"72:56:1","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":24,"linearizedBaseContracts":[24],"name":"IRateProvider","nameLocation":"138:13:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":18,"nodeType":"StructuredDocumentation","src":"158:573:1","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":23,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:1","nodeType":"FunctionDefinition","parameters":{"id":19,"nodeType":"ParameterList","parameters":[],"src":"752:2:1"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"rate","nameLocation":"786:4:1","nodeType":"VariableDeclaration","scope":23,"src":"778:12:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:1"},"scope":24,"src":"736:56:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":25,"src":"128:666:1","usedErrors":[],"usedEvents":[]}],"src":"46:749:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","exportedSymbols":{"ContractType":[33],"IBalancerContractRegistry":[202]},"id":203,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":26,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"canonicalName":"ContractType","documentation":{"id":27,"nodeType":"StructuredDocumentation","src":"72:61:2","text":"@notice Registered contracts must be one of these types."},"id":33,"members":[{"id":28,"name":"OTHER","nameLocation":"157:5:2","nodeType":"EnumValue","src":"157:5:2"},{"id":29,"name":"POOL_FACTORY","nameLocation":"255:12:2","nodeType":"EnumValue","src":"255:12:2"},{"id":30,"name":"ROUTER","nameLocation":"273:6:2","nodeType":"EnumValue","src":"273:6:2"},{"id":31,"name":"HOOK","nameLocation":"285:4:2","nodeType":"EnumValue","src":"285:4:2"},{"id":32,"name":"ERC4626","nameLocation":"295:7:2","nodeType":"EnumValue","src":"295:7:2"}],"name":"ContractType","nameLocation":"138:12:2","nodeType":"EnumDefinition","src":"133:171:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IBalancerContractRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":202,"linearizedBaseContracts":[202],"name":"IBalancerContractRegistry","nameLocation":"316:25:2","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerContractRegistry.ContractInfo","documentation":{"id":34,"nodeType":"StructuredDocumentation","src":"348:887:2","text":" @notice Store the state of a registered Balancer contract.\n @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n things that don't find into the standard types (e.g., helper contracts).\n @param contractType The type of contract (e.g., Router or Hook)\n @param isRegistered This flag indicates whether there is an entry for the associated address\n @param isActive If there is an entry, this flag indicates whether it is active or deprecated"},"id":42,"members":[{"constant":false,"id":37,"mutability":"mutable","name":"contractType","nameLocation":"1283:12:2","nodeType":"VariableDeclaration","scope":42,"src":"1270:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":36,"nodeType":"UserDefinedTypeName","pathNode":{"id":35,"name":"ContractType","nameLocations":["1270:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"1270:12:2"},"referencedDeclaration":33,"src":"1270:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":39,"mutability":"mutable","name":"isRegistered","nameLocation":"1310:12:2","nodeType":"VariableDeclaration","scope":42,"src":"1305:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38,"name":"bool","nodeType":"ElementaryTypeName","src":"1305:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":41,"mutability":"mutable","name":"isActive","nameLocation":"1337:8:2","nodeType":"VariableDeclaration","scope":42,"src":"1332:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40,"name":"bool","nodeType":"ElementaryTypeName","src":"1332:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContractInfo","nameLocation":"1247:12:2","nodeType":"StructDefinition","scope":202,"src":"1240:112:2","visibility":"public"},{"anonymous":false,"documentation":{"id":43,"nodeType":"StructuredDocumentation","src":"1358:278:2","text":" @notice Emitted when a new contract is registered.\n @param contractType The type of contract being registered\n @param contractName The name of the contract being registered\n @param contractAddress The address of the contract being registered"},"eventSelector":"b12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e2","id":52,"name":"BalancerContractRegistered","nameLocation":"1647:26:2","nodeType":"EventDefinition","parameters":{"id":51,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"1704:12:2","nodeType":"VariableDeclaration","scope":52,"src":"1683:33:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":45,"nodeType":"UserDefinedTypeName","pathNode":{"id":44,"name":"ContractType","nameLocations":["1683:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"1683:12:2"},"referencedDeclaration":33,"src":"1683:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":48,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"1741:12:2","nodeType":"VariableDeclaration","scope":52,"src":"1726:27:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":50,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"1779:15:2","nodeType":"VariableDeclaration","scope":52,"src":"1763:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1673:127:2"},"src":"1641:160:2"},{"anonymous":false,"documentation":{"id":53,"nodeType":"StructuredDocumentation","src":"1807:296:2","text":" @notice Emitted when a new contract is deregistered (deleted).\n @param contractType The type of contract being deregistered\n @param contractName The name of the contract being deregistered\n @param contractAddress The address of the contract being deregistered"},"eventSelector":"fa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c","id":62,"name":"BalancerContractDeregistered","nameLocation":"2114:28:2","nodeType":"EventDefinition","parameters":{"id":61,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"2173:12:2","nodeType":"VariableDeclaration","scope":62,"src":"2152:33:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":55,"nodeType":"UserDefinedTypeName","pathNode":{"id":54,"name":"ContractType","nameLocations":["2152:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"2152:12:2"},"referencedDeclaration":33,"src":"2152:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":58,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"2210:12:2","nodeType":"VariableDeclaration","scope":62,"src":"2195:27:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":57,"name":"string","nodeType":"ElementaryTypeName","src":"2195:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":60,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2248:15:2","nodeType":"VariableDeclaration","scope":62,"src":"2232:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59,"name":"address","nodeType":"ElementaryTypeName","src":"2232:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2142:127:2"},"src":"2108:162:2"},{"anonymous":false,"documentation":{"id":63,"nodeType":"StructuredDocumentation","src":"2276:203:2","text":" @notice Emitted when a registered contract is deprecated.\n @dev This sets the `isActive` flag to false.\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b","id":67,"name":"BalancerContractDeprecated","nameLocation":"2490:26:2","nodeType":"EventDefinition","parameters":{"id":66,"nodeType":"ParameterList","parameters":[{"constant":false,"id":65,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2533:15:2","nodeType":"VariableDeclaration","scope":67,"src":"2517:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64,"name":"address","nodeType":"ElementaryTypeName","src":"2517:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2516:33:2"},"src":"2484:66:2"},{"anonymous":false,"documentation":{"id":68,"nodeType":"StructuredDocumentation","src":"2556:187:2","text":" @notice Emitted when an alias is added or updated.\n @param contractAlias The alias name\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e573058465483","id":74,"name":"ContractAliasUpdated","nameLocation":"2754:20:2","nodeType":"EventDefinition","parameters":{"id":73,"nodeType":"ParameterList","parameters":[{"constant":false,"id":70,"indexed":true,"mutability":"mutable","name":"contractAlias","nameLocation":"2790:13:2","nodeType":"VariableDeclaration","scope":74,"src":"2775:28:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":69,"name":"string","nodeType":"ElementaryTypeName","src":"2775:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":72,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2821:15:2","nodeType":"VariableDeclaration","scope":74,"src":"2805:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":71,"name":"address","nodeType":"ElementaryTypeName","src":"2805:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2774:63:2"},"src":"2748:90:2"},{"documentation":{"id":75,"nodeType":"StructuredDocumentation","src":"2844:531:2","text":" @notice A contract has already been registered under the given address.\n @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n name => address => state mapping.\n @param contractType The contract type, provided for documentation purposes\n @param contractAddress The address of the previously registered contract"},"errorSelector":"25a14e0c","id":82,"name":"ContractAddressAlreadyRegistered","nameLocation":"3386:32:2","nodeType":"ErrorDefinition","parameters":{"id":81,"nodeType":"ParameterList","parameters":[{"constant":false,"id":78,"mutability":"mutable","name":"contractType","nameLocation":"3432:12:2","nodeType":"VariableDeclaration","scope":82,"src":"3419:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":77,"nodeType":"UserDefinedTypeName","pathNode":{"id":76,"name":"ContractType","nameLocations":["3419:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"3419:12:2"},"referencedDeclaration":33,"src":"3419:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":80,"mutability":"mutable","name":"contractAddress","nameLocation":"3454:15:2","nodeType":"VariableDeclaration","scope":82,"src":"3446:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":79,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3418:52:2"},"src":"3380:91:2"},{"documentation":{"id":83,"nodeType":"StructuredDocumentation","src":"3477:439:2","text":" @notice A contract has already been registered under the given name.\n @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n different types, or the same name and different addresses.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract"},"errorSelector":"a1e69ed3","id":90,"name":"ContractNameAlreadyRegistered","nameLocation":"3927:29:2","nodeType":"ErrorDefinition","parameters":{"id":89,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86,"mutability":"mutable","name":"contractType","nameLocation":"3970:12:2","nodeType":"VariableDeclaration","scope":90,"src":"3957:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":85,"nodeType":"UserDefinedTypeName","pathNode":{"id":84,"name":"ContractType","nameLocations":["3957:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"3957:12:2"},"referencedDeclaration":33,"src":"3957:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":88,"mutability":"mutable","name":"contractName","nameLocation":"3991:12:2","nodeType":"VariableDeclaration","scope":90,"src":"3984:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":87,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3956:48:2"},"src":"3921:84:2"},{"documentation":{"id":91,"nodeType":"StructuredDocumentation","src":"4011:338:2","text":" @notice The proposed contract name has already been added as an alias.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractName The name of the previously registered contract\n @param contractAddress The address of the previously registered contract"},"errorSelector":"6d4f9990","id":97,"name":"ContractNameInUseAsAlias","nameLocation":"4360:24:2","nodeType":"ErrorDefinition","parameters":{"id":96,"nodeType":"ParameterList","parameters":[{"constant":false,"id":93,"mutability":"mutable","name":"contractName","nameLocation":"4392:12:2","nodeType":"VariableDeclaration","scope":97,"src":"4385:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":92,"name":"string","nodeType":"ElementaryTypeName","src":"4385:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":95,"mutability":"mutable","name":"contractAddress","nameLocation":"4414:15:2","nodeType":"VariableDeclaration","scope":97,"src":"4406:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":94,"name":"address","nodeType":"ElementaryTypeName","src":"4406:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4384:46:2"},"src":"4354:77:2"},{"documentation":{"id":98,"nodeType":"StructuredDocumentation","src":"4437:371:2","text":" @notice The proposed alias has already been registered as a contract.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract (and proposed alias)"},"errorSelector":"4466cf0c","id":105,"name":"ContractAliasInUseAsName","nameLocation":"4819:24:2","nodeType":"ErrorDefinition","parameters":{"id":104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":101,"mutability":"mutable","name":"contractType","nameLocation":"4857:12:2","nodeType":"VariableDeclaration","scope":105,"src":"4844:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":100,"nodeType":"UserDefinedTypeName","pathNode":{"id":99,"name":"ContractType","nameLocations":["4844:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"4844:12:2"},"referencedDeclaration":33,"src":"4844:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":103,"mutability":"mutable","name":"contractName","nameLocation":"4878:12:2","nodeType":"VariableDeclaration","scope":105,"src":"4871:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":102,"name":"string","nodeType":"ElementaryTypeName","src":"4871:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4843:48:2"},"src":"4813:79:2"},{"documentation":{"id":106,"nodeType":"StructuredDocumentation","src":"4898:175:2","text":" @notice Thrown when attempting to deregister a contract that was not previously registered.\n @param contractName The name of the unregistered contract"},"errorSelector":"cd3599f9","id":110,"name":"ContractNameNotRegistered","nameLocation":"5084:25:2","nodeType":"ErrorDefinition","parameters":{"id":109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":108,"mutability":"mutable","name":"contractName","nameLocation":"5117:12:2","nodeType":"VariableDeclaration","scope":110,"src":"5110:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":107,"name":"string","nodeType":"ElementaryTypeName","src":"5110:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5109:21:2"},"src":"5078:53:2"},{"documentation":{"id":111,"nodeType":"StructuredDocumentation","src":"5137:329:2","text":" @notice An operation that requires a valid contract specified an unrecognized address.\n @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n registered contract.\n @param contractAddress The address of the contract that was not registered"},"errorSelector":"f5b5d364","id":115,"name":"ContractAddressNotRegistered","nameLocation":"5477:28:2","nodeType":"ErrorDefinition","parameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"mutability":"mutable","name":"contractAddress","nameLocation":"5514:15:2","nodeType":"VariableDeclaration","scope":115,"src":"5506:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":112,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5505:25:2"},"src":"5471:60:2"},{"documentation":{"id":116,"nodeType":"StructuredDocumentation","src":"5537:145:2","text":" @notice Contracts can only be deprecated once.\n @param contractAddress The address of the previously deprecated contract"},"errorSelector":"1f118c35","id":120,"name":"ContractAlreadyDeprecated","nameLocation":"5693:25:2","nodeType":"ErrorDefinition","parameters":{"id":119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"mutability":"mutable","name":"contractAddress","nameLocation":"5727:15:2","nodeType":"VariableDeclaration","scope":120,"src":"5719:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117,"name":"address","nodeType":"ElementaryTypeName","src":"5719:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5718:25:2"},"src":"5687:57:2"},{"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"5750:95:2","text":"@notice Cannot register or deprecate contracts, or add an alias targeting the zero address."},"errorSelector":"b4d92c53","id":123,"name":"ZeroContractAddress","nameLocation":"5856:19:2","nodeType":"ErrorDefinition","parameters":{"id":122,"nodeType":"ParameterList","parameters":[],"src":"5875:2:2"},"src":"5850:28:2"},{"documentation":{"id":124,"nodeType":"StructuredDocumentation","src":"5884:86:2","text":"@notice Cannot register (or deregister) a contract with an empty string as a name."},"errorSelector":"830c907e","id":126,"name":"InvalidContractName","nameLocation":"5981:19:2","nodeType":"ErrorDefinition","parameters":{"id":125,"nodeType":"ParameterList","parameters":[],"src":"6000:2:2"},"src":"5975:28:2"},{"documentation":{"id":127,"nodeType":"StructuredDocumentation","src":"6009:51:2","text":"@notice Cannot add an empty string as an alias."},"errorSelector":"907f9fd9","id":129,"name":"InvalidContractAlias","nameLocation":"6071:20:2","nodeType":"ErrorDefinition","parameters":{"id":128,"nodeType":"ParameterList","parameters":[],"src":"6091:2:2"},"src":"6065:29:2"},{"documentation":{"id":130,"nodeType":"StructuredDocumentation","src":"6100:711:2","text":" @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n (not blank). Governance must ensure this is called with valid information. Emits the\n `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n already in use.\n @param contractType The type of contract being registered\n @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n @param contractAddress The address of the contract"},"functionSelector":"e0376ab4","id":140,"implemented":false,"kind":"function","modifiers":[],"name":"registerBalancerContract","nameLocation":"6825:24:2","nodeType":"FunctionDefinition","parameters":{"id":138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133,"mutability":"mutable","name":"contractType","nameLocation":"6872:12:2","nodeType":"VariableDeclaration","scope":140,"src":"6859:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":132,"nodeType":"UserDefinedTypeName","pathNode":{"id":131,"name":"ContractType","nameLocations":["6859:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"6859:12:2"},"referencedDeclaration":33,"src":"6859:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":135,"mutability":"mutable","name":"contractName","nameLocation":"6908:12:2","nodeType":"VariableDeclaration","scope":140,"src":"6894:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134,"name":"string","nodeType":"ElementaryTypeName","src":"6894:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":137,"mutability":"mutable","name":"contractAddress","nameLocation":"6938:15:2","nodeType":"VariableDeclaration","scope":140,"src":"6930:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":136,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6849:110:2"},"returnParameters":{"id":139,"nodeType":"ParameterList","parameters":[],"src":"6968:0:2"},"scope":202,"src":"6816:153:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":141,"nodeType":"StructuredDocumentation","src":"6975:878:2","text":" @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n it, and register it again with the correct data. It must start with the name, as this is the registry key,\n required for complete deletion.\n Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n the correct address.\n @param contractName The name of the contract being deprecated (cannot be an alias)"},"functionSelector":"c7f90793","id":146,"implemented":false,"kind":"function","modifiers":[],"name":"deregisterBalancerContract","nameLocation":"7867:26:2","nodeType":"FunctionDefinition","parameters":{"id":144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":143,"mutability":"mutable","name":"contractName","nameLocation":"7908:12:2","nodeType":"VariableDeclaration","scope":146,"src":"7894:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":142,"name":"string","nodeType":"ElementaryTypeName","src":"7894:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7893:28:2"},"returnParameters":{"id":145,"nodeType":"ParameterList","parameters":[],"src":"7930:0:2"},"scope":202,"src":"7858:73:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":147,"nodeType":"StructuredDocumentation","src":"7937:472:2","text":" @notice Deprecate an official Balancer contract.\n @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n enforced unique, so either the name or address could be specified in principle.\n @param contractAddress The address of the contract being deprecated"},"functionSelector":"44969a9c","id":152,"implemented":false,"kind":"function","modifiers":[],"name":"deprecateBalancerContract","nameLocation":"8423:25:2","nodeType":"FunctionDefinition","parameters":{"id":150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":149,"mutability":"mutable","name":"contractAddress","nameLocation":"8457:15:2","nodeType":"VariableDeclaration","scope":152,"src":"8449:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":148,"name":"address","nodeType":"ElementaryTypeName","src":"8449:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8448:25:2"},"returnParameters":{"id":151,"nodeType":"ParameterList","parameters":[],"src":"8482:0:2"},"scope":202,"src":"8414:69:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":153,"nodeType":"StructuredDocumentation","src":"8489:650:2","text":" @notice Add an alias for a registered contract.\n @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n need to track specific versions. Once added, an alias can also be updated to point to a different address\n (e.g., when migrating from the v2 to the v3 weighted pool).\n @param contractAlias An alternate name that can be used to fetch a contract address\n @param existingContract The target address of the contract alias"},"functionSelector":"2967af96","id":160,"implemented":false,"kind":"function","modifiers":[],"name":"addOrUpdateBalancerContractAlias","nameLocation":"9153:32:2","nodeType":"FunctionDefinition","parameters":{"id":158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":155,"mutability":"mutable","name":"contractAlias","nameLocation":"9200:13:2","nodeType":"VariableDeclaration","scope":160,"src":"9186:27:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":154,"name":"string","nodeType":"ElementaryTypeName","src":"9186:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":157,"mutability":"mutable","name":"existingContract","nameLocation":"9223:16:2","nodeType":"VariableDeclaration","scope":160,"src":"9215:24:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":156,"name":"address","nodeType":"ElementaryTypeName","src":"9215:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9185:55:2"},"returnParameters":{"id":159,"nodeType":"ParameterList","parameters":[],"src":"9249:0:2"},"scope":202,"src":"9144:106:2","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":161,"nodeType":"StructuredDocumentation","src":"9256:316:2","text":" @notice Determine whether an address is an official contract of the specified type.\n @param contractType The type of contract\n @param contractAddress The address of the contract\n @return isActive True if the given address is a registered and active contract of the specified type"},"functionSelector":"ae2733a4","id":171,"implemented":false,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"9586:24:2","nodeType":"FunctionDefinition","parameters":{"id":167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":164,"mutability":"mutable","name":"contractType","nameLocation":"9633:12:2","nodeType":"VariableDeclaration","scope":171,"src":"9620:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":163,"nodeType":"UserDefinedTypeName","pathNode":{"id":162,"name":"ContractType","nameLocations":["9620:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"9620:12:2"},"referencedDeclaration":33,"src":"9620:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":166,"mutability":"mutable","name":"contractAddress","nameLocation":"9663:15:2","nodeType":"VariableDeclaration","scope":171,"src":"9655:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":165,"name":"address","nodeType":"ElementaryTypeName","src":"9655:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9610:74:2"},"returnParameters":{"id":170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":169,"mutability":"mutable","name":"isActive","nameLocation":"9713:8:2","nodeType":"VariableDeclaration","scope":171,"src":"9708:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":168,"name":"bool","nodeType":"ElementaryTypeName","src":"9708:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9707:15:2"},"scope":202,"src":"9577:146:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":172,"nodeType":"StructuredDocumentation","src":"9729:496:2","text":" @notice Look up a registered contract by type and name.\n @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n (e.g., `WeightedPool`).\n @param contractType The type of the contract\n @param contractName The name of the contract\n @return contractAddress The address of the associated contract, if registered, or zero\n @return isActive True if the contract was registered and not deprecated"},"functionSelector":"41d8c0bb","id":184,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"10239:19:2","nodeType":"FunctionDefinition","parameters":{"id":178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"mutability":"mutable","name":"contractType","nameLocation":"10281:12:2","nodeType":"VariableDeclaration","scope":184,"src":"10268:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},"typeName":{"id":174,"nodeType":"UserDefinedTypeName","pathNode":{"id":173,"name":"ContractType","nameLocations":["10268:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":33,"src":"10268:12:2"},"referencedDeclaration":33,"src":"10268:12:2","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":177,"mutability":"mutable","name":"contractName","nameLocation":"10317:12:2","nodeType":"VariableDeclaration","scope":184,"src":"10303:26:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":176,"name":"string","nodeType":"ElementaryTypeName","src":"10303:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10258:77:2"},"returnParameters":{"id":183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"contractAddress","nameLocation":"10367:15:2","nodeType":"VariableDeclaration","scope":184,"src":"10359:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":179,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":182,"mutability":"mutable","name":"isActive","nameLocation":"10389:8:2","nodeType":"VariableDeclaration","scope":184,"src":"10384:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":181,"name":"bool","nodeType":"ElementaryTypeName","src":"10384:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10358:40:2"},"scope":202,"src":"10230:169:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":185,"nodeType":"StructuredDocumentation","src":"10405:233:2","text":" @notice Look up complete information about a registered contract by address.\n @param contractAddress The address of the associated contract\n @return info ContractInfo struct corresponding to the address"},"functionSelector":"8554c327","id":193,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"10652:23:2","nodeType":"FunctionDefinition","parameters":{"id":188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":187,"mutability":"mutable","name":"contractAddress","nameLocation":"10684:15:2","nodeType":"VariableDeclaration","scope":193,"src":"10676:23:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":186,"name":"address","nodeType":"ElementaryTypeName","src":"10676:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10675:25:2"},"returnParameters":{"id":192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":191,"mutability":"mutable","name":"info","nameLocation":"10744:4:2","nodeType":"VariableDeclaration","scope":193,"src":"10724:24:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$42_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":190,"nodeType":"UserDefinedTypeName","pathNode":{"id":189,"name":"ContractInfo","nameLocations":["10724:12:2"],"nodeType":"IdentifierPath","referencedDeclaration":42,"src":"10724:12:2"},"referencedDeclaration":42,"src":"10724:12:2","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$42_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"10723:26:2"},"scope":202,"src":"10643:107:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":194,"nodeType":"StructuredDocumentation","src":"10756:92:2","text":"@notice Returns `true` if the given address is an active contract under the ROUTER type."},"functionSelector":"264e97e0","id":201,"implemented":false,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"10862:15:2","nodeType":"FunctionDefinition","parameters":{"id":197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":196,"mutability":"mutable","name":"router","nameLocation":"10886:6:2","nodeType":"VariableDeclaration","scope":201,"src":"10878:14:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":195,"name":"address","nodeType":"ElementaryTypeName","src":"10878:7:2","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10877:16:2"},"returnParameters":{"id":200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":201,"src":"10917:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":198,"name":"bool","nodeType":"ElementaryTypeName","src":"10917:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10916:6:2"},"scope":202,"src":"10853:70:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":203,"src":"306:10619:2","usedErrors":[82,90,97,105,110,115,120,123,126,129],"usedEvents":[52,62,67,74]}],"src":"46:10880:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[218]},"id":219,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":204,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":205,"nodeType":"StructuredDocumentation","src":"72:56:3","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":218,"linearizedBaseContracts":[218],"name":"IAuthorizer","nameLocation":"138:11:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":206,"nodeType":"StructuredDocumentation","src":"156:354:3","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":217,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:3","nodeType":"FunctionDefinition","parameters":{"id":213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":208,"mutability":"mutable","name":"actionId","nameLocation":"543:8:3","nodeType":"VariableDeclaration","scope":217,"src":"535:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":207,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":210,"mutability":"mutable","name":"account","nameLocation":"561:7:3","nodeType":"VariableDeclaration","scope":217,"src":"553:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":209,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":212,"mutability":"mutable","name":"where","nameLocation":"578:5:3","nodeType":"VariableDeclaration","scope":217,"src":"570:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":211,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:3"},"returnParameters":{"id":216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":215,"mutability":"mutable","name":"success","nameLocation":"613:7:3","nodeType":"VariableDeclaration","scope":217,"src":"608:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":214,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:3"},"scope":218,"src":"515:107:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":219,"src":"128:496:3","usedErrors":[],"usedEvents":[]}],"src":"46:579:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AfterSwapParams":[2453],"HookFlags":[2279],"IHooks":[420],"LiquidityManagement":[2232],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"SwapKind":[2387],"TokenConfig":[2346]},"id":421,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":220,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":229,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":421,"sourceUnit":2524,"src":"289:193:4","symbolAliases":[{"foreign":{"id":221,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2346,"src":"302:11:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":222,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2232,"src":"319:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":223,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2424,"src":"344:14:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":224,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2453,"src":"364:15:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":225,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2279,"src":"385:9:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":226,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2459,"src":"400:16:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":227,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"422:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":228,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2387,"src":"447:8:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":230,"nodeType":"StructuredDocumentation","src":"484:490:4","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":420,"linearizedBaseContracts":[420],"name":"IHooks","nameLocation":"985:6:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":231,"nodeType":"StructuredDocumentation","src":"1205:769:4","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":247,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:4","nodeType":"FunctionDefinition","parameters":{"id":243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":233,"mutability":"mutable","name":"factory","nameLocation":"2016:7:4","nodeType":"VariableDeclaration","scope":247,"src":"2008:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":232,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"pool","nameLocation":"2041:4:4","nodeType":"VariableDeclaration","scope":247,"src":"2033:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":234,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":239,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:4","nodeType":"VariableDeclaration","scope":247,"src":"2055:32:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":237,"nodeType":"UserDefinedTypeName","pathNode":{"id":236,"name":"TokenConfig","nameLocations":["2055:11:4"],"nodeType":"IdentifierPath","referencedDeclaration":2346,"src":"2055:11:4"},"referencedDeclaration":2346,"src":"2055:11:4","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2346_storage_ptr","typeString":"struct TokenConfig"}},"id":238,"nodeType":"ArrayTypeName","src":"2055:13:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":242,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:4","nodeType":"VariableDeclaration","scope":247,"src":"2097:48:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":241,"nodeType":"UserDefinedTypeName","pathNode":{"id":240,"name":"LiquidityManagement","nameLocations":["2097:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"2097:19:4"},"referencedDeclaration":2232,"src":"2097:19:4","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:4"},"returnParameters":{"id":246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":245,"mutability":"mutable","name":"success","nameLocation":"2175:7:4","nodeType":"VariableDeclaration","scope":247,"src":"2170:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":244,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:4"},"scope":420,"src":"1979:205:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":248,"nodeType":"StructuredDocumentation","src":"2190:412:4","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":254,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:4","nodeType":"FunctionDefinition","parameters":{"id":249,"nodeType":"ParameterList","parameters":[],"src":"2628:2:4"},"returnParameters":{"id":253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":252,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:4","nodeType":"VariableDeclaration","scope":254,"src":"2654:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2279_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":251,"nodeType":"UserDefinedTypeName","pathNode":{"id":250,"name":"HookFlags","nameLocations":["2654:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":2279,"src":"2654:9:4"},"referencedDeclaration":2279,"src":"2654:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2279_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:4"},"scope":420,"src":"2607:75:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":255,"nodeType":"StructuredDocumentation","src":"2897:484:4","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":265,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:4","nodeType":"FunctionDefinition","parameters":{"id":261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":258,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:4","nodeType":"VariableDeclaration","scope":265,"src":"3414:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":256,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":257,"nodeType":"ArrayTypeName","src":"3414:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":260,"mutability":"mutable","name":"userData","nameLocation":"3460:8:4","nodeType":"VariableDeclaration","scope":265,"src":"3447:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":259,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:4"},"returnParameters":{"id":264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":263,"mutability":"mutable","name":"success","nameLocation":"3493:7:4","nodeType":"VariableDeclaration","scope":265,"src":"3488:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":262,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:4"},"scope":420,"src":"3386:116:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":266,"nodeType":"StructuredDocumentation","src":"3508:563:4","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":278,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:4","nodeType":"FunctionDefinition","parameters":{"id":274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":269,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:4","nodeType":"VariableDeclaration","scope":278,"src":"4112:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":267,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":268,"nodeType":"ArrayTypeName","src":"4112:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":271,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:4","nodeType":"VariableDeclaration","scope":278,"src":"4153:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":270,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":273,"mutability":"mutable","name":"userData","nameLocation":"4196:8:4","nodeType":"VariableDeclaration","scope":278,"src":"4183:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":272,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:4"},"returnParameters":{"id":277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":276,"mutability":"mutable","name":"success","nameLocation":"4234:7:4","nodeType":"VariableDeclaration","scope":278,"src":"4229:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":275,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:4"},"scope":420,"src":"4076:167:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":279,"nodeType":"StructuredDocumentation","src":"4461:953:4","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":301,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:4","nodeType":"FunctionDefinition","parameters":{"id":297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":281,"mutability":"mutable","name":"router","nameLocation":"5466:6:4","nodeType":"VariableDeclaration","scope":301,"src":"5458:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":280,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":283,"mutability":"mutable","name":"pool","nameLocation":"5490:4:4","nodeType":"VariableDeclaration","scope":301,"src":"5482:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":282,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":286,"mutability":"mutable","name":"kind","nameLocation":"5521:4:4","nodeType":"VariableDeclaration","scope":301,"src":"5504:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"},"typeName":{"id":285,"nodeType":"UserDefinedTypeName","pathNode":{"id":284,"name":"AddLiquidityKind","nameLocations":["5504:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2459,"src":"5504:16:4"},"referencedDeclaration":2459,"src":"5504:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":289,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:4","nodeType":"VariableDeclaration","scope":301,"src":"5535:37:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":287,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":288,"nodeType":"ArrayTypeName","src":"5535:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":291,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:4","nodeType":"VariableDeclaration","scope":301,"src":"5582:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":290,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":294,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:4","nodeType":"VariableDeclaration","scope":301,"src":"5615:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":292,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":293,"nodeType":"ArrayTypeName","src":"5615:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":296,"mutability":"mutable","name":"userData","nameLocation":"5671:8:4","nodeType":"VariableDeclaration","scope":301,"src":"5658:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":295,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:4"},"returnParameters":{"id":300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":299,"mutability":"mutable","name":"success","nameLocation":"5709:7:4","nodeType":"VariableDeclaration","scope":301,"src":"5704:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":298,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:4"},"scope":420,"src":"5419:299:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":302,"nodeType":"StructuredDocumentation","src":"5724:1250:4","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":330,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:4","nodeType":"FunctionDefinition","parameters":{"id":323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":304,"mutability":"mutable","name":"router","nameLocation":"7025:6:4","nodeType":"VariableDeclaration","scope":330,"src":"7017:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":303,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":306,"mutability":"mutable","name":"pool","nameLocation":"7049:4:4","nodeType":"VariableDeclaration","scope":330,"src":"7041:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":305,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":309,"mutability":"mutable","name":"kind","nameLocation":"7080:4:4","nodeType":"VariableDeclaration","scope":330,"src":"7063:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"},"typeName":{"id":308,"nodeType":"UserDefinedTypeName","pathNode":{"id":307,"name":"AddLiquidityKind","nameLocations":["7063:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2459,"src":"7063:16:4"},"referencedDeclaration":2459,"src":"7063:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":312,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:4","nodeType":"VariableDeclaration","scope":330,"src":"7094:34:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":310,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":311,"nodeType":"ArrayTypeName","src":"7094:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":315,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:4","nodeType":"VariableDeclaration","scope":330,"src":"7138:29:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":313,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":314,"nodeType":"ArrayTypeName","src":"7138:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":317,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:4","nodeType":"VariableDeclaration","scope":330,"src":"7177:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":316,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":320,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:4","nodeType":"VariableDeclaration","scope":330,"src":"7207:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":318,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":319,"nodeType":"ArrayTypeName","src":"7207:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":322,"mutability":"mutable","name":"userData","nameLocation":"7263:8:4","nodeType":"VariableDeclaration","scope":330,"src":"7250:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":321,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:4"},"returnParameters":{"id":329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":325,"mutability":"mutable","name":"success","nameLocation":"7301:7:4","nodeType":"VariableDeclaration","scope":330,"src":"7296:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":324,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":328,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:4","nodeType":"VariableDeclaration","scope":330,"src":"7310:41:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":326,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":327,"nodeType":"ArrayTypeName","src":"7310:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:4"},"scope":420,"src":"6979:374:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":331,"nodeType":"StructuredDocumentation","src":"7572:992:4","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":353,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:4","nodeType":"FunctionDefinition","parameters":{"id":349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":333,"mutability":"mutable","name":"router","nameLocation":"8619:6:4","nodeType":"VariableDeclaration","scope":353,"src":"8611:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":332,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":335,"mutability":"mutable","name":"pool","nameLocation":"8643:4:4","nodeType":"VariableDeclaration","scope":353,"src":"8635:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":334,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":338,"mutability":"mutable","name":"kind","nameLocation":"8677:4:4","nodeType":"VariableDeclaration","scope":353,"src":"8657:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":337,"nodeType":"UserDefinedTypeName","pathNode":{"id":336,"name":"RemoveLiquidityKind","nameLocations":["8657:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2480,"src":"8657:19:4"},"referencedDeclaration":2480,"src":"8657:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":340,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:4","nodeType":"VariableDeclaration","scope":353,"src":"8691:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":339,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":343,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:4","nodeType":"VariableDeclaration","scope":353,"src":"8723:38:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":341,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":342,"nodeType":"ArrayTypeName","src":"8723:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":346,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:4","nodeType":"VariableDeclaration","scope":353,"src":"8771:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":344,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":345,"nodeType":"ArrayTypeName","src":"8771:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":348,"mutability":"mutable","name":"userData","nameLocation":"8827:8:4","nodeType":"VariableDeclaration","scope":353,"src":"8814:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":347,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:4"},"returnParameters":{"id":352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":351,"mutability":"mutable","name":"success","nameLocation":"8865:7:4","nodeType":"VariableDeclaration","scope":353,"src":"8860:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":350,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:4"},"scope":420,"src":"8569:305:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":354,"nodeType":"StructuredDocumentation","src":"8880:1276:4","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":382,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:4","nodeType":"FunctionDefinition","parameters":{"id":375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":356,"mutability":"mutable","name":"router","nameLocation":"10210:6:4","nodeType":"VariableDeclaration","scope":382,"src":"10202:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":355,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":358,"mutability":"mutable","name":"pool","nameLocation":"10234:4:4","nodeType":"VariableDeclaration","scope":382,"src":"10226:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":357,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":361,"mutability":"mutable","name":"kind","nameLocation":"10268:4:4","nodeType":"VariableDeclaration","scope":382,"src":"10248:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":360,"nodeType":"UserDefinedTypeName","pathNode":{"id":359,"name":"RemoveLiquidityKind","nameLocations":["10248:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2480,"src":"10248:19:4"},"referencedDeclaration":2480,"src":"10248:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":363,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:4","nodeType":"VariableDeclaration","scope":382,"src":"10282:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":362,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":366,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:4","nodeType":"VariableDeclaration","scope":382,"src":"10311:35:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":364,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":365,"nodeType":"ArrayTypeName","src":"10311:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":369,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:4","nodeType":"VariableDeclaration","scope":382,"src":"10356:30:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":367,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":368,"nodeType":"ArrayTypeName","src":"10356:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":372,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:4","nodeType":"VariableDeclaration","scope":382,"src":"10396:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":370,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":371,"nodeType":"ArrayTypeName","src":"10396:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":374,"mutability":"mutable","name":"userData","nameLocation":"10452:8:4","nodeType":"VariableDeclaration","scope":382,"src":"10439:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":373,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:4"},"returnParameters":{"id":381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":377,"mutability":"mutable","name":"success","nameLocation":"10490:7:4","nodeType":"VariableDeclaration","scope":382,"src":"10485:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":376,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":380,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:4","nodeType":"VariableDeclaration","scope":382,"src":"10499:42:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":378,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":379,"nodeType":"ArrayTypeName","src":"10499:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:4"},"scope":420,"src":"10161:382:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":383,"nodeType":"StructuredDocumentation","src":"10753:556:4","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":393,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:4","nodeType":"FunctionDefinition","parameters":{"id":389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":386,"mutability":"mutable","name":"params","nameLocation":"11360:6:4","nodeType":"VariableDeclaration","scope":393,"src":"11336:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":385,"nodeType":"UserDefinedTypeName","pathNode":{"id":384,"name":"PoolSwapParams","nameLocations":["11336:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2424,"src":"11336:14:4"},"referencedDeclaration":2424,"src":"11336:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":388,"mutability":"mutable","name":"pool","nameLocation":"11376:4:4","nodeType":"VariableDeclaration","scope":393,"src":"11368:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":387,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:4"},"returnParameters":{"id":392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":391,"mutability":"mutable","name":"success","nameLocation":"11405:7:4","nodeType":"VariableDeclaration","scope":393,"src":"11400:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":390,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:4"},"scope":420,"src":"11314:100:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":394,"nodeType":"StructuredDocumentation","src":"11420:671:4","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":404,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:4","nodeType":"FunctionDefinition","parameters":{"id":398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":397,"mutability":"mutable","name":"params","nameLocation":"12151:6:4","nodeType":"VariableDeclaration","scope":404,"src":"12126:31:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2453_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":396,"nodeType":"UserDefinedTypeName","pathNode":{"id":395,"name":"AfterSwapParams","nameLocations":["12126:15:4"],"nodeType":"IdentifierPath","referencedDeclaration":2453,"src":"12126:15:4"},"referencedDeclaration":2453,"src":"12126:15:4","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2453_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:4"},"returnParameters":{"id":403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"mutability":"mutable","name":"success","nameLocation":"12187:7:4","nodeType":"VariableDeclaration","scope":404,"src":"12182:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":399,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":402,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:4","nodeType":"VariableDeclaration","scope":404,"src":"12196:39:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":401,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:4"},"scope":420,"src":"12096:141:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":405,"nodeType":"StructuredDocumentation","src":"12243:795:4","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":419,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:4","nodeType":"FunctionDefinition","parameters":{"id":413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":408,"mutability":"mutable","name":"params","nameLocation":"13119:6:4","nodeType":"VariableDeclaration","scope":419,"src":"13095:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":407,"nodeType":"UserDefinedTypeName","pathNode":{"id":406,"name":"PoolSwapParams","nameLocations":["13095:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2424,"src":"13095:14:4"},"referencedDeclaration":2424,"src":"13095:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":410,"mutability":"mutable","name":"pool","nameLocation":"13143:4:4","nodeType":"VariableDeclaration","scope":419,"src":"13135:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":409,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":412,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:4","nodeType":"VariableDeclaration","scope":419,"src":"13157:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":411,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:4"},"returnParameters":{"id":418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":415,"mutability":"mutable","name":"success","nameLocation":"13223:7:4","nodeType":"VariableDeclaration","scope":419,"src":"13218:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":414,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":417,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:4","nodeType":"VariableDeclaration","scope":419,"src":"13232:32:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":416,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:4"},"scope":420,"src":"13043:223:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":421,"src":"975:12293:4","usedErrors":[],"usedEvents":[]}],"src":"46:13223:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[3290],"IProtocolFeeController":[725],"IVault":[763]},"id":726,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":422,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":726,"sourceUnit":3291,"src":"72:72:5","symbolAliases":[{"foreign":{"id":423,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":726,"sourceUnit":764,"src":"146:38:5","symbolAliases":[{"foreign":{"id":425,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"155:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":427,"nodeType":"StructuredDocumentation","src":"186:80:5","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":725,"linearizedBaseContracts":[725],"name":"IProtocolFeeController","nameLocation":"276:22:5","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":428,"nodeType":"StructuredDocumentation","src":"305:157:5","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":432,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:5","nodeType":"EventDefinition","parameters":{"id":431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":430,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:5","nodeType":"VariableDeclaration","scope":432,"src":"512:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":429,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:5"},"src":"467:72:5"},{"anonymous":false,"documentation":{"id":433,"nodeType":"StructuredDocumentation","src":"545:160:5","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":437,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:5","nodeType":"EventDefinition","parameters":{"id":436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":435,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:5","nodeType":"VariableDeclaration","scope":437,"src":"756:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":434,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:5"},"src":"710:74:5"},{"anonymous":false,"documentation":{"id":438,"nodeType":"StructuredDocumentation","src":"790:245:5","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":444,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:5","nodeType":"EventDefinition","parameters":{"id":443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":440,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:5","nodeType":"VariableDeclaration","scope":444,"src":"1079:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":439,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":442,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:5","nodeType":"VariableDeclaration","scope":444,"src":"1101:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":441,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:5"},"src":"1040:88:5"},{"anonymous":false,"documentation":{"id":445,"nodeType":"StructuredDocumentation","src":"1134:249:5","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":451,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:5","nodeType":"EventDefinition","parameters":{"id":450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":447,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:5","nodeType":"VariableDeclaration","scope":451,"src":"1428:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":446,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":449,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:5","nodeType":"VariableDeclaration","scope":451,"src":"1450:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":448,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:5"},"src":"1388:90:5"},{"anonymous":false,"documentation":{"id":452,"nodeType":"StructuredDocumentation","src":"1484:267:5","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":458,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:5","nodeType":"EventDefinition","parameters":{"id":457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":454,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:5","nodeType":"VariableDeclaration","scope":458,"src":"1798:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":453,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":456,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:5","nodeType":"VariableDeclaration","scope":458,"src":"1820:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":455,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:5"},"src":"1756:102:5"},{"anonymous":false,"documentation":{"id":459,"nodeType":"StructuredDocumentation","src":"1864:271:5","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":465,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:5","nodeType":"EventDefinition","parameters":{"id":464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:5","nodeType":"VariableDeclaration","scope":465,"src":"2183:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":460,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":463,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:5","nodeType":"VariableDeclaration","scope":465,"src":"2205:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":462,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:5"},"src":"2140:104:5"},{"anonymous":false,"documentation":{"id":466,"nodeType":"StructuredDocumentation","src":"2250:560:5","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":475,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:5","nodeType":"EventDefinition","parameters":{"id":474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":468,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:5","nodeType":"VariableDeclaration","scope":475,"src":"2846:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":467,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":471,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:5","nodeType":"VariableDeclaration","scope":475,"src":"2868:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":470,"nodeType":"UserDefinedTypeName","pathNode":{"id":469,"name":"IERC20","nameLocations":["2868:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2868:6:5"},"referencedDeclaration":3290,"src":"2868:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":473,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:5","nodeType":"VariableDeclaration","scope":475,"src":"2890:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":472,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:5"},"src":"2815:91:5"},{"anonymous":false,"documentation":{"id":476,"nodeType":"StructuredDocumentation","src":"2912:564:5","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":485,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:5","nodeType":"EventDefinition","parameters":{"id":484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":478,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:5","nodeType":"VariableDeclaration","scope":485,"src":"3513:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":477,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":481,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:5","nodeType":"VariableDeclaration","scope":485,"src":"3535:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":480,"nodeType":"UserDefinedTypeName","pathNode":{"id":479,"name":"IERC20","nameLocations":["3535:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3535:6:5"},"referencedDeclaration":3290,"src":"3535:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":483,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:5","nodeType":"VariableDeclaration","scope":485,"src":"3557:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":482,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:5"},"src":"3481:92:5"},{"anonymous":false,"documentation":{"id":486,"nodeType":"StructuredDocumentation","src":"3579:333:5","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":497,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:5","nodeType":"EventDefinition","parameters":{"id":496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":488,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:5","nodeType":"VariableDeclaration","scope":497,"src":"3945:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":487,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":491,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:5","nodeType":"VariableDeclaration","scope":497,"src":"3967:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":490,"nodeType":"UserDefinedTypeName","pathNode":{"id":489,"name":"IERC20","nameLocations":["3967:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3967:6:5"},"referencedDeclaration":3290,"src":"3967:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":493,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:5","nodeType":"VariableDeclaration","scope":497,"src":"3989:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":492,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":495,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:5","nodeType":"VariableDeclaration","scope":497,"src":"4016:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":494,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:5"},"src":"3917:115:5"},{"anonymous":false,"documentation":{"id":498,"nodeType":"StructuredDocumentation","src":"4038:398:5","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":509,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:5","nodeType":"EventDefinition","parameters":{"id":508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":500,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:5","nodeType":"VariableDeclaration","scope":509,"src":"4481:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":499,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":503,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:5","nodeType":"VariableDeclaration","scope":509,"src":"4511:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":502,"nodeType":"UserDefinedTypeName","pathNode":{"id":501,"name":"IERC20","nameLocations":["4511:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"4511:6:5"},"referencedDeclaration":3290,"src":"4511:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":505,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:5","nodeType":"VariableDeclaration","scope":509,"src":"4541:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":504,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":507,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:5","nodeType":"VariableDeclaration","scope":509,"src":"4576:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":506,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:5"},"src":"4441:156:5"},{"anonymous":false,"documentation":{"id":510,"nodeType":"StructuredDocumentation","src":"4603:529:5","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":518,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:5","nodeType":"EventDefinition","parameters":{"id":517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":512,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:5","nodeType":"VariableDeclaration","scope":518,"src":"5190:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":511,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":514,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:5","nodeType":"VariableDeclaration","scope":518,"src":"5220:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":513,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":516,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:5","nodeType":"VariableDeclaration","scope":518,"src":"5264:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":515,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:5"},"src":"5137:158:5"},{"anonymous":false,"documentation":{"id":519,"nodeType":"StructuredDocumentation","src":"5301:533:5","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":527,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:5","nodeType":"EventDefinition","parameters":{"id":526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":521,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:5","nodeType":"VariableDeclaration","scope":527,"src":"5893:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":520,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":523,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:5","nodeType":"VariableDeclaration","scope":527,"src":"5923:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":522,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":525,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:5","nodeType":"VariableDeclaration","scope":527,"src":"5968:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":524,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:5"},"src":"5839:160:5"},{"documentation":{"id":528,"nodeType":"StructuredDocumentation","src":"6005:219:5","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":530,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"6235:32:5","nodeType":"ErrorDefinition","parameters":{"id":529,"nodeType":"ParameterList","parameters":[],"src":"6267:2:5"},"src":"6229:41:5"},{"documentation":{"id":531,"nodeType":"StructuredDocumentation","src":"6276:221:5","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":533,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"6508:33:5","nodeType":"ErrorDefinition","parameters":{"id":532,"nodeType":"ParameterList","parameters":[],"src":"6541:2:5"},"src":"6502:42:5"},{"documentation":{"id":534,"nodeType":"StructuredDocumentation","src":"6550:156:5","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":538,"name":"PoolCreatorNotRegistered","nameLocation":"6717:24:5","nodeType":"ErrorDefinition","parameters":{"id":537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":536,"mutability":"mutable","name":"pool","nameLocation":"6750:4:5","nodeType":"VariableDeclaration","scope":538,"src":"6742:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":535,"name":"address","nodeType":"ElementaryTypeName","src":"6742:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6741:14:5"},"src":"6711:45:5"},{"documentation":{"id":539,"nodeType":"StructuredDocumentation","src":"6762:236:5","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":545,"name":"CallerIsNotPoolCreator","nameLocation":"7009:22:5","nodeType":"ErrorDefinition","parameters":{"id":544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":541,"mutability":"mutable","name":"caller","nameLocation":"7040:6:5","nodeType":"VariableDeclaration","scope":545,"src":"7032:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":540,"name":"address","nodeType":"ElementaryTypeName","src":"7032:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":543,"mutability":"mutable","name":"pool","nameLocation":"7056:4:5","nodeType":"VariableDeclaration","scope":545,"src":"7048:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":542,"name":"address","nodeType":"ElementaryTypeName","src":"7048:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7031:30:5"},"src":"7003:59:5"},{"documentation":{"id":546,"nodeType":"StructuredDocumentation","src":"7068:110:5","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":548,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"7189:31:5","nodeType":"ErrorDefinition","parameters":{"id":547,"nodeType":"ParameterList","parameters":[],"src":"7220:2:5"},"src":"7183:40:5"},{"documentation":{"id":549,"nodeType":"StructuredDocumentation","src":"7229:109:5","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":555,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"7352:5:5","nodeType":"FunctionDefinition","parameters":{"id":550,"nodeType":"ParameterList","parameters":[],"src":"7357:2:5"},"returnParameters":{"id":554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":553,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":555,"src":"7383:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":552,"nodeType":"UserDefinedTypeName","pathNode":{"id":551,"name":"IVault","nameLocations":["7383:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"7383:6:5"},"referencedDeclaration":763,"src":"7383:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"7382:8:5"},"scope":725,"src":"7343:48:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":556,"nodeType":"StructuredDocumentation","src":"7397:131:5","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":561,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"7542:20:5","nodeType":"FunctionDefinition","parameters":{"id":559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":558,"mutability":"mutable","name":"pool","nameLocation":"7571:4:5","nodeType":"VariableDeclaration","scope":561,"src":"7563:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":557,"name":"address","nodeType":"ElementaryTypeName","src":"7563:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7562:14:5"},"returnParameters":{"id":560,"nodeType":"ParameterList","parameters":[],"src":"7585:0:5"},"scope":725,"src":"7533:53:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":562,"nodeType":"StructuredDocumentation","src":"7592:156:5","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":567,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"7762:34:5","nodeType":"FunctionDefinition","parameters":{"id":563,"nodeType":"ParameterList","parameters":[],"src":"7796:2:5"},"returnParameters":{"id":566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":565,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"7830:25:5","nodeType":"VariableDeclaration","scope":567,"src":"7822:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":564,"name":"uint256","nodeType":"ElementaryTypeName","src":"7822:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7821:35:5"},"scope":725,"src":"7753:104:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":568,"nodeType":"StructuredDocumentation","src":"7863:159:5","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":573,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8036:35:5","nodeType":"FunctionDefinition","parameters":{"id":569,"nodeType":"ParameterList","parameters":[],"src":"8071:2:5"},"returnParameters":{"id":572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":571,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8105:26:5","nodeType":"VariableDeclaration","scope":573,"src":"8097:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":570,"name":"uint256","nodeType":"ElementaryTypeName","src":"8097:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8096:36:5"},"scope":725,"src":"8027:106:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":574,"nodeType":"StructuredDocumentation","src":"8139:280:5","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The global protocol swap fee percentage\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":583,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"8433:26:5","nodeType":"FunctionDefinition","parameters":{"id":577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":576,"mutability":"mutable","name":"pool","nameLocation":"8477:4:5","nodeType":"VariableDeclaration","scope":583,"src":"8469:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":575,"name":"address","nodeType":"ElementaryTypeName","src":"8469:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8459:28:5"},"returnParameters":{"id":582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":579,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8519:25:5","nodeType":"VariableDeclaration","scope":583,"src":"8511:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":578,"name":"uint256","nodeType":"ElementaryTypeName","src":"8511:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":581,"mutability":"mutable","name":"isOverride","nameLocation":"8551:10:5","nodeType":"VariableDeclaration","scope":583,"src":"8546:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":580,"name":"bool","nodeType":"ElementaryTypeName","src":"8546:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8510:52:5"},"scope":725,"src":"8424:139:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":584,"nodeType":"StructuredDocumentation","src":"8569:283:5","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The global protocol yield fee percentage\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":593,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"8866:27:5","nodeType":"FunctionDefinition","parameters":{"id":587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":586,"mutability":"mutable","name":"pool","nameLocation":"8911:4:5","nodeType":"VariableDeclaration","scope":593,"src":"8903:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":585,"name":"address","nodeType":"ElementaryTypeName","src":"8903:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8893:28:5"},"returnParameters":{"id":592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":589,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8953:26:5","nodeType":"VariableDeclaration","scope":593,"src":"8945:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":588,"name":"uint256","nodeType":"ElementaryTypeName","src":"8945:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":591,"mutability":"mutable","name":"isOverride","nameLocation":"8986:10:5","nodeType":"VariableDeclaration","scope":593,"src":"8981:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":590,"name":"bool","nodeType":"ElementaryTypeName","src":"8981:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8944:53:5"},"scope":725,"src":"8857:141:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":594,"nodeType":"StructuredDocumentation","src":"9004:344:5","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":602,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"9362:21:5","nodeType":"FunctionDefinition","parameters":{"id":597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":596,"mutability":"mutable","name":"pool","nameLocation":"9392:4:5","nodeType":"VariableDeclaration","scope":602,"src":"9384:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":595,"name":"address","nodeType":"ElementaryTypeName","src":"9384:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9383:14:5"},"returnParameters":{"id":601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":600,"mutability":"mutable","name":"feeAmounts","nameLocation":"9438:10:5","nodeType":"VariableDeclaration","scope":602,"src":"9421:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":598,"name":"uint256","nodeType":"ElementaryTypeName","src":"9421:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":599,"nodeType":"ArrayTypeName","src":"9421:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9420:29:5"},"scope":725,"src":"9353:97:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":603,"nodeType":"StructuredDocumentation","src":"9456:348:5","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":611,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"9818:24:5","nodeType":"FunctionDefinition","parameters":{"id":606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":605,"mutability":"mutable","name":"pool","nameLocation":"9851:4:5","nodeType":"VariableDeclaration","scope":611,"src":"9843:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":604,"name":"address","nodeType":"ElementaryTypeName","src":"9843:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9842:14:5"},"returnParameters":{"id":610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"feeAmounts","nameLocation":"9897:10:5","nodeType":"VariableDeclaration","scope":611,"src":"9880:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":607,"name":"uint256","nodeType":"ElementaryTypeName","src":"9880:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":608,"nodeType":"ArrayTypeName","src":"9880:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9879:29:5"},"scope":725,"src":"9809:100:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":612,"nodeType":"StructuredDocumentation","src":"9915:1445:5","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":621,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"11374:29:5","nodeType":"FunctionDefinition","parameters":{"id":617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":614,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"11421:21:5","nodeType":"VariableDeclaration","scope":621,"src":"11413:29:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":613,"name":"uint256","nodeType":"ElementaryTypeName","src":"11413:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":616,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11460:24:5","nodeType":"VariableDeclaration","scope":621,"src":"11452:32:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":615,"name":"uint256","nodeType":"ElementaryTypeName","src":"11452:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11403:87:5"},"returnParameters":{"id":620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":619,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11522:22:5","nodeType":"VariableDeclaration","scope":621,"src":"11514:30:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":618,"name":"uint256","nodeType":"ElementaryTypeName","src":"11514:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11513:32:5"},"scope":725,"src":"11365:181:5","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":622,"nodeType":"StructuredDocumentation","src":"11552:398:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":627,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"11964:31:5","nodeType":"FunctionDefinition","parameters":{"id":625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":624,"mutability":"mutable","name":"pool","nameLocation":"12004:4:5","nodeType":"VariableDeclaration","scope":627,"src":"11996:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":623,"name":"address","nodeType":"ElementaryTypeName","src":"11996:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11995:14:5"},"returnParameters":{"id":626,"nodeType":"ParameterList","parameters":[],"src":"12018:0:5"},"scope":725,"src":"11955:64:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":628,"nodeType":"StructuredDocumentation","src":"12025:400:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":633,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"12439:32:5","nodeType":"FunctionDefinition","parameters":{"id":631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":630,"mutability":"mutable","name":"pool","nameLocation":"12480:4:5","nodeType":"VariableDeclaration","scope":633,"src":"12472:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":629,"name":"address","nodeType":"ElementaryTypeName","src":"12472:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12471:14:5"},"returnParameters":{"id":632,"nodeType":"ParameterList","parameters":[],"src":"12494:0:5"},"scope":725,"src":"12430:65:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":634,"nodeType":"StructuredDocumentation","src":"12719:826:5","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":647,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"13559:12:5","nodeType":"FunctionDefinition","parameters":{"id":641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":636,"mutability":"mutable","name":"pool","nameLocation":"13589:4:5","nodeType":"VariableDeclaration","scope":647,"src":"13581:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":635,"name":"address","nodeType":"ElementaryTypeName","src":"13581:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":638,"mutability":"mutable","name":"poolCreator","nameLocation":"13611:11:5","nodeType":"VariableDeclaration","scope":647,"src":"13603:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":637,"name":"address","nodeType":"ElementaryTypeName","src":"13603:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":640,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"13637:17:5","nodeType":"VariableDeclaration","scope":647,"src":"13632:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":639,"name":"bool","nodeType":"ElementaryTypeName","src":"13632:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13571:89:5"},"returnParameters":{"id":646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":643,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"13687:26:5","nodeType":"VariableDeclaration","scope":647,"src":"13679:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":642,"name":"uint256","nodeType":"ElementaryTypeName","src":"13679:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":645,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"13723:27:5","nodeType":"VariableDeclaration","scope":647,"src":"13715:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":644,"name":"uint256","nodeType":"ElementaryTypeName","src":"13715:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13678:73:5"},"scope":725,"src":"13550:202:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":648,"nodeType":"StructuredDocumentation","src":"13758:175:5","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":653,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"13947:34:5","nodeType":"FunctionDefinition","parameters":{"id":651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":650,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"13990:28:5","nodeType":"VariableDeclaration","scope":653,"src":"13982:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":649,"name":"uint256","nodeType":"ElementaryTypeName","src":"13982:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13981:38:5"},"returnParameters":{"id":652,"nodeType":"ParameterList","parameters":[],"src":"14028:0:5"},"scope":725,"src":"13938:91:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":654,"nodeType":"StructuredDocumentation","src":"14035:178:5","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":659,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"14227:35:5","nodeType":"FunctionDefinition","parameters":{"id":657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":656,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"14271:29:5","nodeType":"VariableDeclaration","scope":659,"src":"14263:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":655,"name":"uint256","nodeType":"ElementaryTypeName","src":"14263:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14262:39:5"},"returnParameters":{"id":658,"nodeType":"ParameterList","parameters":[],"src":"14310:0:5"},"scope":725,"src":"14218:93:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":660,"nodeType":"StructuredDocumentation","src":"14317:272:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":667,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"14603:28:5","nodeType":"FunctionDefinition","parameters":{"id":665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":662,"mutability":"mutable","name":"pool","nameLocation":"14640:4:5","nodeType":"VariableDeclaration","scope":667,"src":"14632:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":661,"name":"address","nodeType":"ElementaryTypeName","src":"14632:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":664,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"14654:28:5","nodeType":"VariableDeclaration","scope":667,"src":"14646:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":663,"name":"uint256","nodeType":"ElementaryTypeName","src":"14646:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14631:52:5"},"returnParameters":{"id":666,"nodeType":"ParameterList","parameters":[],"src":"14692:0:5"},"scope":725,"src":"14594:99:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":668,"nodeType":"StructuredDocumentation","src":"14699:276:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":675,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"14989:29:5","nodeType":"FunctionDefinition","parameters":{"id":673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":670,"mutability":"mutable","name":"pool","nameLocation":"15027:4:5","nodeType":"VariableDeclaration","scope":675,"src":"15019:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":669,"name":"address","nodeType":"ElementaryTypeName","src":"15019:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":672,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"15041:29:5","nodeType":"VariableDeclaration","scope":675,"src":"15033:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":671,"name":"uint256","nodeType":"ElementaryTypeName","src":"15033:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15018:53:5"},"returnParameters":{"id":674,"nodeType":"ParameterList","parameters":[],"src":"15080:0:5"},"scope":725,"src":"14980:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":676,"nodeType":"StructuredDocumentation","src":"15087:623:5","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":683,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"15724:31:5","nodeType":"FunctionDefinition","parameters":{"id":681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":678,"mutability":"mutable","name":"pool","nameLocation":"15764:4:5","nodeType":"VariableDeclaration","scope":683,"src":"15756:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":677,"name":"address","nodeType":"ElementaryTypeName","src":"15756:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":680,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"15778:28:5","nodeType":"VariableDeclaration","scope":683,"src":"15770:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":679,"name":"uint256","nodeType":"ElementaryTypeName","src":"15770:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15755:52:5"},"returnParameters":{"id":682,"nodeType":"ParameterList","parameters":[],"src":"15816:0:5"},"scope":725,"src":"15715:102:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":684,"nodeType":"StructuredDocumentation","src":"15823:626:5","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":691,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"16463:32:5","nodeType":"FunctionDefinition","parameters":{"id":689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":686,"mutability":"mutable","name":"pool","nameLocation":"16504:4:5","nodeType":"VariableDeclaration","scope":691,"src":"16496:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":685,"name":"address","nodeType":"ElementaryTypeName","src":"16496:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":688,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"16518:29:5","nodeType":"VariableDeclaration","scope":691,"src":"16510:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":687,"name":"uint256","nodeType":"ElementaryTypeName","src":"16510:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16495:53:5"},"returnParameters":{"id":690,"nodeType":"ParameterList","parameters":[],"src":"16557:0:5"},"scope":725,"src":"16454:104:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":692,"nodeType":"StructuredDocumentation","src":"16564:296:5","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":699,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"16874:20:5","nodeType":"FunctionDefinition","parameters":{"id":697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":694,"mutability":"mutable","name":"pool","nameLocation":"16903:4:5","nodeType":"VariableDeclaration","scope":699,"src":"16895:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":693,"name":"address","nodeType":"ElementaryTypeName","src":"16895:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":696,"mutability":"mutable","name":"recipient","nameLocation":"16917:9:5","nodeType":"VariableDeclaration","scope":699,"src":"16909:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":695,"name":"address","nodeType":"ElementaryTypeName","src":"16909:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16894:33:5"},"returnParameters":{"id":698,"nodeType":"ParameterList","parameters":[],"src":"16936:0:5"},"scope":725,"src":"16865:72:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":700,"nodeType":"StructuredDocumentation","src":"16943:339:5","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":710,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"17296:28:5","nodeType":"FunctionDefinition","parameters":{"id":708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":702,"mutability":"mutable","name":"pool","nameLocation":"17333:4:5","nodeType":"VariableDeclaration","scope":710,"src":"17325:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":701,"name":"address","nodeType":"ElementaryTypeName","src":"17325:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":704,"mutability":"mutable","name":"recipient","nameLocation":"17347:9:5","nodeType":"VariableDeclaration","scope":710,"src":"17339:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":703,"name":"address","nodeType":"ElementaryTypeName","src":"17339:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":707,"mutability":"mutable","name":"token","nameLocation":"17365:5:5","nodeType":"VariableDeclaration","scope":710,"src":"17358:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":706,"nodeType":"UserDefinedTypeName","pathNode":{"id":705,"name":"IERC20","nameLocations":["17358:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"17358:6:5"},"referencedDeclaration":3290,"src":"17358:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17324:47:5"},"returnParameters":{"id":709,"nodeType":"ParameterList","parameters":[],"src":"17380:0:5"},"scope":725,"src":"17287:94:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":711,"nodeType":"StructuredDocumentation","src":"17387:291:5","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":718,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"17692:23:5","nodeType":"FunctionDefinition","parameters":{"id":716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":713,"mutability":"mutable","name":"pool","nameLocation":"17724:4:5","nodeType":"VariableDeclaration","scope":718,"src":"17716:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":712,"name":"address","nodeType":"ElementaryTypeName","src":"17716:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":715,"mutability":"mutable","name":"recipient","nameLocation":"17738:9:5","nodeType":"VariableDeclaration","scope":718,"src":"17730:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":714,"name":"address","nodeType":"ElementaryTypeName","src":"17730:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17715:33:5"},"returnParameters":{"id":717,"nodeType":"ParameterList","parameters":[],"src":"17757:0:5"},"scope":725,"src":"17683:75:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":719,"nodeType":"StructuredDocumentation","src":"17764:310:5","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":724,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"18088:23:5","nodeType":"FunctionDefinition","parameters":{"id":722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":721,"mutability":"mutable","name":"pool","nameLocation":"18120:4:5","nodeType":"VariableDeclaration","scope":724,"src":"18112:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":720,"name":"address","nodeType":"ElementaryTypeName","src":"18112:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18111:14:5"},"returnParameters":{"id":723,"nodeType":"ParameterList","parameters":[],"src":"18134:0:5"},"scope":725,"src":"18079:56:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":726,"src":"266:17871:5","usedErrors":[530,533,538,545,548],"usedEvents":[432,437,444,451,458,465,475,485,497,509,518,527]}],"src":"46:18092:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[14],"IVault":[763],"IVaultAdmin":[1053],"IVaultErrors":[1420],"IVaultEvents":[1659],"IVaultExtension":[2078],"IVaultMain":[2214]},"id":764,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":727,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":729,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":15,"src":"72:80:6","symbolAliases":[{"foreign":{"id":728,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":731,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":2079,"src":"153:56:6","symbolAliases":[{"foreign":{"id":730,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2078,"src":"162:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":733,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":1421,"src":"210:50:6","symbolAliases":[{"foreign":{"id":732,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1420,"src":"219:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":735,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":1660,"src":"261:50:6","symbolAliases":[{"foreign":{"id":734,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1659,"src":"270:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":737,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":1054,"src":"312:48:6","symbolAliases":[{"foreign":{"id":736,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1053,"src":"321:11:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":739,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":764,"sourceUnit":2215,"src":"361:46:6","symbolAliases":[{"foreign":{"id":738,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2214,"src":"370:10:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":741,"name":"IVaultMain","nameLocations":["539:10:6"],"nodeType":"IdentifierPath","referencedDeclaration":2214,"src":"539:10:6"},"id":742,"nodeType":"InheritanceSpecifier","src":"539:10:6"},{"baseName":{"id":743,"name":"IVaultExtension","nameLocations":["551:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":2078,"src":"551:15:6"},"id":744,"nodeType":"InheritanceSpecifier","src":"551:15:6"},{"baseName":{"id":745,"name":"IVaultAdmin","nameLocations":["568:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":1053,"src":"568:11:6"},"id":746,"nodeType":"InheritanceSpecifier","src":"568:11:6"},{"baseName":{"id":747,"name":"IVaultErrors","nameLocations":["581:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1420,"src":"581:12:6"},"id":748,"nodeType":"InheritanceSpecifier","src":"581:12:6"},{"baseName":{"id":749,"name":"IVaultEvents","nameLocations":["595:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1659,"src":"595:12:6"},"id":750,"nodeType":"InheritanceSpecifier","src":"595:12:6"},{"baseName":{"id":751,"name":"IAuthentication","nameLocations":["609:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"609:15:6"},"id":752,"nodeType":"InheritanceSpecifier","src":"609:15:6"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"409:110:6","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":763,"linearizedBaseContracts":[763,14,1659,1420,1053,2078,2214],"name":"IVault","nameLocation":"529:6:6","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[781,1682],"documentation":{"id":753,"nodeType":"StructuredDocumentation","src":"631:41:6","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":762,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:6","nodeType":"FunctionDefinition","overrides":{"id":757,"nodeType":"OverrideSpecifier","overrides":[{"id":755,"name":"IVaultAdmin","nameLocations":["717:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":1053,"src":"717:11:6"},{"id":756,"name":"IVaultExtension","nameLocations":["730:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":2078,"src":"730:15:6"}],"src":"708:38:6"},"parameters":{"id":754,"nodeType":"ParameterList","parameters":[],"src":"691:2:6"},"returnParameters":{"id":761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":762,"src":"756:6:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":759,"nodeType":"UserDefinedTypeName","pathNode":{"id":758,"name":"IVault","nameLocations":["756:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"756:6:6"},"referencedDeclaration":763,"src":"756:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:6"},"scope":763,"src":"677:87:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":764,"src":"519:247:6","usedErrors":[5,1065,1070,1075,1080,1089,1095,1098,1101,1104,1107,1110,1113,1122,1125,1128,1131,1134,1137,1140,1143,1146,1149,1152,1155,1158,1161,1164,1170,1177,1184,1187,1190,1200,1210,1217,1220,1223,1226,1236,1246,1253,1256,1259,1262,1265,1268,1271,1274,1277,1282,1287,1292,1295,1298,1301,1304,1307,1312,1317,1322,1328,1334,1337,1345,1351,1357,1360,1363,1366,1371,1381,1391,1398,1401,1404,1407,1410,1413,1416,1419],"usedEvents":[1458,1463,1482,1494,1506,1524,1542,1547,1550,1553,1560,1567,1574,1581,1588,1594,1600,1612,1622,1632,1644,1649,1658]}],"src":"46:721:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[218],"IERC4626":[3212],"IProtocolFeeController":[725],"IVault":[763],"IVaultAdmin":[1053]},"id":1054,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":765,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:7"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":767,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1054,"sourceUnit":3213,"src":"72:75:7","symbolAliases":[{"foreign":{"id":766,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"81:8:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":769,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1054,"sourceUnit":726,"src":"149:70:7","symbolAliases":[{"foreign":{"id":768,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":725,"src":"158:22:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":771,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1054,"sourceUnit":219,"src":"220:48:7","symbolAliases":[{"foreign":{"id":770,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"229:11:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":773,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1054,"sourceUnit":764,"src":"269:38:7","symbolAliases":[{"foreign":{"id":772,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"278:6:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":774,"nodeType":"StructuredDocumentation","src":"309:276:7","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":1053,"linearizedBaseContracts":[1053],"name":"IVaultAdmin","nameLocation":"596:11:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":775,"nodeType":"StructuredDocumentation","src":"841:206:7","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":781,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:7","nodeType":"FunctionDefinition","parameters":{"id":776,"nodeType":"ParameterList","parameters":[],"src":"1066:2:7"},"returnParameters":{"id":780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":781,"src":"1092:6:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":778,"nodeType":"UserDefinedTypeName","pathNode":{"id":777,"name":"IVault","nameLocations":["1092:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"1092:6:7"},"referencedDeclaration":763,"src":"1092:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:7"},"scope":1053,"src":"1052:48:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":782,"nodeType":"StructuredDocumentation","src":"1106:326:7","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":787,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:7","nodeType":"FunctionDefinition","parameters":{"id":783,"nodeType":"ParameterList","parameters":[],"src":"1467:2:7"},"returnParameters":{"id":786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":785,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:7","nodeType":"VariableDeclaration","scope":787,"src":"1493:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":784,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:7"},"scope":1053,"src":"1437:83:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":788,"nodeType":"StructuredDocumentation","src":"1526:414:7","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":793,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:7","nodeType":"FunctionDefinition","parameters":{"id":789,"nodeType":"ParameterList","parameters":[],"src":"1977:2:7"},"returnParameters":{"id":792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":791,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:7","nodeType":"VariableDeclaration","scope":793,"src":"2003:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":790,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:7"},"scope":1053,"src":"1945:87:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":794,"nodeType":"StructuredDocumentation","src":"2038:321:7","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":799,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:7","nodeType":"FunctionDefinition","parameters":{"id":795,"nodeType":"ParameterList","parameters":[],"src":"2395:2:7"},"returnParameters":{"id":798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":797,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:7","nodeType":"VariableDeclaration","scope":799,"src":"2421:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":796,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:7"},"scope":1053,"src":"2364:85:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":800,"nodeType":"StructuredDocumentation","src":"2455:193:7","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":805,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:7","nodeType":"FunctionDefinition","parameters":{"id":801,"nodeType":"ParameterList","parameters":[],"src":"2682:2:7"},"returnParameters":{"id":804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":803,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:7","nodeType":"VariableDeclaration","scope":805,"src":"2708:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":802,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:7"},"scope":1053,"src":"2653:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":806,"nodeType":"StructuredDocumentation","src":"2733:129:7","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":811,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:7","nodeType":"FunctionDefinition","parameters":{"id":807,"nodeType":"ParameterList","parameters":[],"src":"2896:2:7"},"returnParameters":{"id":810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":809,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:7","nodeType":"VariableDeclaration","scope":811,"src":"2922:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":808,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:7"},"scope":1053,"src":"2867:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":812,"nodeType":"StructuredDocumentation","src":"2947:439:7","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":817,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:7","nodeType":"FunctionDefinition","parameters":{"id":813,"nodeType":"ParameterList","parameters":[],"src":"3425:2:7"},"returnParameters":{"id":816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":815,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:7","nodeType":"VariableDeclaration","scope":817,"src":"3451:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":814,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:7"},"scope":1053,"src":"3391:92:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":818,"nodeType":"StructuredDocumentation","src":"3489:502:7","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":823,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:7","nodeType":"FunctionDefinition","parameters":{"id":819,"nodeType":"ParameterList","parameters":[],"src":"4032:2:7"},"returnParameters":{"id":822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":821,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:7","nodeType":"VariableDeclaration","scope":823,"src":"4058:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":820,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:7"},"scope":1053,"src":"3996:96:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":824,"nodeType":"StructuredDocumentation","src":"4098:291:7","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":829,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:7","nodeType":"FunctionDefinition","parameters":{"id":825,"nodeType":"ParameterList","parameters":[],"src":"4424:2:7"},"returnParameters":{"id":828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":827,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:7","nodeType":"VariableDeclaration","scope":829,"src":"4450:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":826,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:7"},"scope":1053,"src":"4394:84:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":830,"nodeType":"StructuredDocumentation","src":"4484:271:7","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":835,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:7","nodeType":"FunctionDefinition","parameters":{"id":831,"nodeType":"ParameterList","parameters":[],"src":"4789:2:7"},"returnParameters":{"id":834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":833,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:7","nodeType":"VariableDeclaration","scope":835,"src":"4815:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":832,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:7"},"scope":1053,"src":"4760:82:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":836,"nodeType":"StructuredDocumentation","src":"5069:529:7","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":841,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:7","nodeType":"FunctionDefinition","parameters":{"id":837,"nodeType":"ParameterList","parameters":[],"src":"5625:2:7"},"returnParameters":{"id":840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":839,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:7","nodeType":"VariableDeclaration","scope":841,"src":"5651:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":838,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:7"},"scope":1053,"src":"5603:66:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":842,"nodeType":"StructuredDocumentation","src":"5675:400:7","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":851,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:7","nodeType":"FunctionDefinition","parameters":{"id":843,"nodeType":"ParameterList","parameters":[],"src":"6108:2:7"},"returnParameters":{"id":850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":845,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:7","nodeType":"VariableDeclaration","scope":851,"src":"6158:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":844,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":847,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:7","nodeType":"VariableDeclaration","scope":851,"src":"6176:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":846,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":849,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:7","nodeType":"VariableDeclaration","scope":851,"src":"6208:31:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":848,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:7"},"scope":1053,"src":"6080:161:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":852,"nodeType":"StructuredDocumentation","src":"6247:517:7","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":855,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:7","nodeType":"FunctionDefinition","parameters":{"id":853,"nodeType":"ParameterList","parameters":[],"src":"6788:2:7"},"returnParameters":{"id":854,"nodeType":"ParameterList","parameters":[],"src":"6799:0:7"},"scope":1053,"src":"6769:31:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":856,"nodeType":"StructuredDocumentation","src":"6806:569:7","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":859,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:7","nodeType":"FunctionDefinition","parameters":{"id":857,"nodeType":"ParameterList","parameters":[],"src":"7401:2:7"},"returnParameters":{"id":858,"nodeType":"ParameterList","parameters":[],"src":"7412:0:7"},"scope":1053,"src":"7380:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":860,"nodeType":"StructuredDocumentation","src":"7639:276:7","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":865,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:7","nodeType":"FunctionDefinition","parameters":{"id":863,"nodeType":"ParameterList","parameters":[{"constant":false,"id":862,"mutability":"mutable","name":"pool","nameLocation":"7947:4:7","nodeType":"VariableDeclaration","scope":865,"src":"7939:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":861,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:7"},"returnParameters":{"id":864,"nodeType":"ParameterList","parameters":[],"src":"7961:0:7"},"scope":1053,"src":"7920:42:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":866,"nodeType":"StructuredDocumentation","src":"7968:366:7","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":871,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:7","nodeType":"FunctionDefinition","parameters":{"id":869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":868,"mutability":"mutable","name":"pool","nameLocation":"8368:4:7","nodeType":"VariableDeclaration","scope":871,"src":"8360:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":867,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:7"},"returnParameters":{"id":870,"nodeType":"ParameterList","parameters":[],"src":"8382:0:7"},"scope":1053,"src":"8339:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":872,"nodeType":"StructuredDocumentation","src":"8606:520:7","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":879,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:7","nodeType":"FunctionDefinition","parameters":{"id":877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":874,"mutability":"mutable","name":"pool","nameLocation":"9175:4:7","nodeType":"VariableDeclaration","scope":879,"src":"9167:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":873,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":876,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:7","nodeType":"VariableDeclaration","scope":879,"src":"9181:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":875,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:7"},"returnParameters":{"id":878,"nodeType":"ParameterList","parameters":[],"src":"9216:0:7"},"scope":1053,"src":"9131:86:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"9223:463:7","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":891,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:7","nodeType":"FunctionDefinition","parameters":{"id":883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"pool","nameLocation":"9738:4:7","nodeType":"VariableDeclaration","scope":891,"src":"9730:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":881,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:7"},"returnParameters":{"id":890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":886,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:7","nodeType":"VariableDeclaration","scope":891,"src":"9767:31:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":884,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":885,"nodeType":"ArrayTypeName","src":"9767:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":889,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:7","nodeType":"VariableDeclaration","scope":891,"src":"9800:32:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":887,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":888,"nodeType":"ArrayTypeName","src":"9800:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:7"},"scope":1053,"src":"9691:143:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":892,"nodeType":"StructuredDocumentation","src":"9840:755:7","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":899,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:7","nodeType":"FunctionDefinition","parameters":{"id":897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":894,"mutability":"mutable","name":"pool","nameLocation":"10650:4:7","nodeType":"VariableDeclaration","scope":899,"src":"10642:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":893,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":896,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:7","nodeType":"VariableDeclaration","scope":899,"src":"10656:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":895,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:7"},"returnParameters":{"id":898,"nodeType":"ParameterList","parameters":[],"src":"10703:0:7"},"scope":1053,"src":"10600:104:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":900,"nodeType":"StructuredDocumentation","src":"10710:760:7","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":907,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:7","nodeType":"FunctionDefinition","parameters":{"id":905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":902,"mutability":"mutable","name":"pool","nameLocation":"11526:4:7","nodeType":"VariableDeclaration","scope":907,"src":"11518:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":901,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":904,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:7","nodeType":"VariableDeclaration","scope":907,"src":"11532:38:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":903,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:7"},"returnParameters":{"id":906,"nodeType":"ParameterList","parameters":[],"src":"11580:0:7"},"scope":1053,"src":"11475:106:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":908,"nodeType":"StructuredDocumentation","src":"11587:249:7","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":914,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:7","nodeType":"FunctionDefinition","parameters":{"id":912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:7","nodeType":"VariableDeclaration","scope":914,"src":"11875:47:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"},"typeName":{"id":910,"nodeType":"UserDefinedTypeName","pathNode":{"id":909,"name":"IProtocolFeeController","nameLocations":["11875:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":725,"src":"11875:22:7"},"referencedDeclaration":725,"src":"11875:22:7","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:7"},"returnParameters":{"id":913,"nodeType":"ParameterList","parameters":[],"src":"11932:0:7"},"scope":1053,"src":"11841:92:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":915,"nodeType":"StructuredDocumentation","src":"12160:557:7","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":920,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:7","nodeType":"FunctionDefinition","parameters":{"id":918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":917,"mutability":"mutable","name":"pool","nameLocation":"12758:4:7","nodeType":"VariableDeclaration","scope":920,"src":"12750:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":916,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:7"},"returnParameters":{"id":919,"nodeType":"ParameterList","parameters":[],"src":"12772:0:7"},"scope":1053,"src":"12722:51:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":921,"nodeType":"StructuredDocumentation","src":"12779:409:7","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":926,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:7","nodeType":"FunctionDefinition","parameters":{"id":924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":923,"mutability":"mutable","name":"pool","nameLocation":"13230:4:7","nodeType":"VariableDeclaration","scope":926,"src":"13222:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":922,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:7"},"returnParameters":{"id":925,"nodeType":"ParameterList","parameters":[],"src":"13244:0:7"},"scope":1053,"src":"13193:52:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":927,"nodeType":"StructuredDocumentation","src":"13476:653:7","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":930,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:7","nodeType":"FunctionDefinition","parameters":{"id":928,"nodeType":"ParameterList","parameters":[],"src":"14155:2:7"},"returnParameters":{"id":929,"nodeType":"ParameterList","parameters":[],"src":"14166:0:7"},"scope":1053,"src":"14134:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":931,"nodeType":"StructuredDocumentation","src":"14173:223:7","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":934,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:7","nodeType":"FunctionDefinition","parameters":{"id":932,"nodeType":"ParameterList","parameters":[],"src":"14433:2:7"},"returnParameters":{"id":933,"nodeType":"ParameterList","parameters":[],"src":"14444:0:7"},"scope":1053,"src":"14401:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":935,"nodeType":"StructuredDocumentation","src":"14451:166:7","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":938,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:7","nodeType":"FunctionDefinition","parameters":{"id":936,"nodeType":"ParameterList","parameters":[],"src":"14642:2:7"},"returnParameters":{"id":937,"nodeType":"ParameterList","parameters":[],"src":"14653:0:7"},"scope":1053,"src":"14622:32:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":939,"nodeType":"StructuredDocumentation","src":"14881:590:7","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":944,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:7","nodeType":"FunctionDefinition","parameters":{"id":940,"nodeType":"ParameterList","parameters":[],"src":"15501:2:7"},"returnParameters":{"id":943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":942,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:7","nodeType":"VariableDeclaration","scope":944,"src":"15527:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":941,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:7"},"scope":1053,"src":"15476:71:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":945,"nodeType":"StructuredDocumentation","src":"15553:619:7","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":948,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:7","nodeType":"FunctionDefinition","parameters":{"id":946,"nodeType":"ParameterList","parameters":[],"src":"16203:2:7"},"returnParameters":{"id":947,"nodeType":"ParameterList","parameters":[],"src":"16214:0:7"},"scope":1053,"src":"16177:38:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":949,"nodeType":"StructuredDocumentation","src":"16221:545:7","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":952,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:7","nodeType":"FunctionDefinition","parameters":{"id":950,"nodeType":"ParameterList","parameters":[],"src":"16799:2:7"},"returnParameters":{"id":951,"nodeType":"ParameterList","parameters":[],"src":"16810:0:7"},"scope":1053,"src":"16771:40:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":953,"nodeType":"StructuredDocumentation","src":"16817:860:7","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":969,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:7","nodeType":"FunctionDefinition","parameters":{"id":965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":956,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:7","nodeType":"VariableDeclaration","scope":969,"src":"17717:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":955,"nodeType":"UserDefinedTypeName","pathNode":{"id":954,"name":"IERC4626","nameLocations":["17717:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"17717:8:7"},"referencedDeclaration":3212,"src":"17717:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":958,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:7","nodeType":"VariableDeclaration","scope":969,"src":"17748:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":957,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":960,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:7","nodeType":"VariableDeclaration","scope":969,"src":"17785:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":959,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":962,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:7","nodeType":"VariableDeclaration","scope":969,"src":"17819:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":961,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":964,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:7","nodeType":"VariableDeclaration","scope":969,"src":"17852:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":963,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:7"},"returnParameters":{"id":968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":967,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:7","nodeType":"VariableDeclaration","scope":969,"src":"17896:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":966,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:7"},"scope":1053,"src":"17682:236:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":970,"nodeType":"StructuredDocumentation","src":"17924:1010:7","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":988,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:7","nodeType":"FunctionDefinition","parameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":973,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:7","nodeType":"VariableDeclaration","scope":988,"src":"18978:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":972,"nodeType":"UserDefinedTypeName","pathNode":{"id":971,"name":"IERC4626","nameLocations":["18978:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"18978:8:7"},"referencedDeclaration":3212,"src":"18978:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":975,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:7","nodeType":"VariableDeclaration","scope":988,"src":"19009:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":974,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":977,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:7","nodeType":"VariableDeclaration","scope":988,"src":"19051:29:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":976,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":979,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:7","nodeType":"VariableDeclaration","scope":988,"src":"19090:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":978,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":981,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:7","nodeType":"VariableDeclaration","scope":988,"src":"19126:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":980,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:7"},"returnParameters":{"id":987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":984,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:7","nodeType":"VariableDeclaration","scope":988,"src":"19170:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":983,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":986,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:7","nodeType":"VariableDeclaration","scope":988,"src":"19199:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":985,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:7"},"scope":1053,"src":"18939:286:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":989,"nodeType":"StructuredDocumentation","src":"19231:1458:7","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":1005,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:7","nodeType":"FunctionDefinition","parameters":{"id":999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":992,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:7","nodeType":"VariableDeclaration","scope":1005,"src":"20738:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":991,"nodeType":"UserDefinedTypeName","pathNode":{"id":990,"name":"IERC4626","nameLocations":["20738:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"20738:8:7"},"referencedDeclaration":3212,"src":"20738:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":994,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:7","nodeType":"VariableDeclaration","scope":1005,"src":"20769:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":993,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":996,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:7","nodeType":"VariableDeclaration","scope":1005,"src":"20801:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":995,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":998,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:7","nodeType":"VariableDeclaration","scope":1005,"src":"20844:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":997,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:7"},"returnParameters":{"id":1004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1001,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:7","nodeType":"VariableDeclaration","scope":1005,"src":"20899:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1000,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1003,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:7","nodeType":"VariableDeclaration","scope":1005,"src":"20936:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1002,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:7"},"scope":1053,"src":"20694:276:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1006,"nodeType":"StructuredDocumentation","src":"20976:382:7","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":1014,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:7","nodeType":"FunctionDefinition","parameters":{"id":1010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1009,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:7","nodeType":"VariableDeclaration","scope":1014,"src":"21387:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1008,"nodeType":"UserDefinedTypeName","pathNode":{"id":1007,"name":"IERC4626","nameLocations":["21387:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"21387:8:7"},"referencedDeclaration":3212,"src":"21387:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:7"},"returnParameters":{"id":1013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1012,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:7","nodeType":"VariableDeclaration","scope":1014,"src":"21433:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1011,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:7"},"scope":1053,"src":"21363:95:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1015,"nodeType":"StructuredDocumentation","src":"21464:441:7","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":1025,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:7","nodeType":"FunctionDefinition","parameters":{"id":1021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1018,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:7","nodeType":"VariableDeclaration","scope":1025,"src":"21949:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1017,"nodeType":"UserDefinedTypeName","pathNode":{"id":1016,"name":"IERC4626","nameLocations":["21949:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"21949:8:7"},"referencedDeclaration":3212,"src":"21949:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1020,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:7","nodeType":"VariableDeclaration","scope":1025,"src":"21980:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1019,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:7"},"returnParameters":{"id":1024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1023,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:7","nodeType":"VariableDeclaration","scope":1025,"src":"22032:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1022,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:7"},"scope":1053,"src":"21910:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"22059:281:7","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":1034,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:7","nodeType":"FunctionDefinition","parameters":{"id":1030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1029,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:7","nodeType":"VariableDeclaration","scope":1034,"src":"22375:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1028,"nodeType":"UserDefinedTypeName","pathNode":{"id":1027,"name":"IERC4626","nameLocations":["22375:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"22375:8:7"},"referencedDeclaration":3212,"src":"22375:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:7"},"returnParameters":{"id":1033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1032,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:7","nodeType":"VariableDeclaration","scope":1034,"src":"22421:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1031,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:7"},"scope":1053,"src":"22345:98:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"22449:521:7","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":1045,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:7","nodeType":"FunctionDefinition","parameters":{"id":1039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1038,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:7","nodeType":"VariableDeclaration","scope":1045,"src":"23010:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1037,"nodeType":"UserDefinedTypeName","pathNode":{"id":1036,"name":"IERC4626","nameLocations":["23010:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"23010:8:7"},"referencedDeclaration":3212,"src":"23010:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:7"},"returnParameters":{"id":1044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1041,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:7","nodeType":"VariableDeclaration","scope":1045,"src":"23061:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1040,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1043,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:7","nodeType":"VariableDeclaration","scope":1045,"src":"23091:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1042,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:7"},"scope":1053,"src":"22975:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1046,"nodeType":"StructuredDocumentation","src":"23342:202:7","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":1052,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:7","nodeType":"FunctionDefinition","parameters":{"id":1050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1049,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:7","nodeType":"VariableDeclaration","scope":1052,"src":"23572:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"},"typeName":{"id":1048,"nodeType":"UserDefinedTypeName","pathNode":{"id":1047,"name":"IAuthorizer","nameLocations":["23572:11:7"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"23572:11:7"},"referencedDeclaration":218,"src":"23572:11:7","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:7"},"returnParameters":{"id":1051,"nodeType":"ParameterList","parameters":[],"src":"23607:0:7"},"scope":1053,"src":"23549:59:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1054,"src":"586:23024:7","usedErrors":[],"usedEvents":[]}],"src":"46:23565:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[3290],"IERC4626":[3212],"IVaultErrors":[1420]},"id":1421,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1055,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1057,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1421,"sourceUnit":3213,"src":"72:75:8","symbolAliases":[{"foreign":{"id":1056,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1059,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1421,"sourceUnit":3291,"src":"148:72:8","symbolAliases":[{"foreign":{"id":1058,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1060,"nodeType":"StructuredDocumentation","src":"222:94:8","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1420,"linearizedBaseContracts":[1420],"name":"IVaultErrors","nameLocation":"326:12:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1061,"nodeType":"StructuredDocumentation","src":"576:149:8","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":1065,"name":"PoolAlreadyRegistered","nameLocation":"736:21:8","nodeType":"ErrorDefinition","parameters":{"id":1064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1063,"mutability":"mutable","name":"pool","nameLocation":"766:4:8","nodeType":"VariableDeclaration","scope":1065,"src":"758:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1062,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:8"},"src":"730:42:8"},{"documentation":{"id":1066,"nodeType":"StructuredDocumentation","src":"778:149:8","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":1070,"name":"PoolAlreadyInitialized","nameLocation":"938:22:8","nodeType":"ErrorDefinition","parameters":{"id":1069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1068,"mutability":"mutable","name":"pool","nameLocation":"969:4:8","nodeType":"VariableDeclaration","scope":1070,"src":"961:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1067,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:8"},"src":"932:43:8"},{"documentation":{"id":1071,"nodeType":"StructuredDocumentation","src":"981:99:8","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":1075,"name":"PoolNotRegistered","nameLocation":"1091:17:8","nodeType":"ErrorDefinition","parameters":{"id":1074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1073,"mutability":"mutable","name":"pool","nameLocation":"1117:4:8","nodeType":"VariableDeclaration","scope":1075,"src":"1109:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1072,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:8"},"src":"1085:38:8"},{"documentation":{"id":1076,"nodeType":"StructuredDocumentation","src":"1129:112:8","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":1080,"name":"PoolNotInitialized","nameLocation":"1252:18:8","nodeType":"ErrorDefinition","parameters":{"id":1079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1078,"mutability":"mutable","name":"pool","nameLocation":"1279:4:8","nodeType":"VariableDeclaration","scope":1080,"src":"1271:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1077,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:8"},"src":"1246:39:8"},{"documentation":{"id":1081,"nodeType":"StructuredDocumentation","src":"1291:274:8","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":1089,"name":"HookRegistrationFailed","nameLocation":"1576:22:8","nodeType":"ErrorDefinition","parameters":{"id":1088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1083,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:8","nodeType":"VariableDeclaration","scope":1089,"src":"1599:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1082,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1085,"mutability":"mutable","name":"pool","nameLocation":"1634:4:8","nodeType":"VariableDeclaration","scope":1089,"src":"1626:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1084,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1087,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:8","nodeType":"VariableDeclaration","scope":1089,"src":"1640:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1086,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:8"},"src":"1570:91:8"},{"documentation":{"id":1090,"nodeType":"StructuredDocumentation","src":"1667:136:8","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":1095,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:8","nodeType":"ErrorDefinition","parameters":{"id":1094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1093,"mutability":"mutable","name":"token","nameLocation":"1844:5:8","nodeType":"VariableDeclaration","scope":1095,"src":"1837:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1092,"nodeType":"UserDefinedTypeName","pathNode":{"id":1091,"name":"IERC20","nameLocations":["1837:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"1837:6:8"},"referencedDeclaration":3290,"src":"1837:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:8"},"src":"1808:43:8"},{"documentation":{"id":1096,"nodeType":"StructuredDocumentation","src":"1857:57:8","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":1098,"name":"MinTokens","nameLocation":"1925:9:8","nodeType":"ErrorDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[],"src":"1934:2:8"},"src":"1919:18:8"},{"documentation":{"id":1099,"nodeType":"StructuredDocumentation","src":"1943:57:8","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":1101,"name":"MaxTokens","nameLocation":"2011:9:8","nodeType":"ErrorDefinition","parameters":{"id":1100,"nodeType":"ParameterList","parameters":[],"src":"2020:2:8"},"src":"2005:18:8"},{"documentation":{"id":1102,"nodeType":"StructuredDocumentation","src":"2029:61:8","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":1104,"name":"InvalidToken","nameLocation":"2101:12:8","nodeType":"ErrorDefinition","parameters":{"id":1103,"nodeType":"ParameterList","parameters":[],"src":"2113:2:8"},"src":"2095:21:8"},{"documentation":{"id":1105,"nodeType":"StructuredDocumentation","src":"2122:86:8","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":1107,"name":"InvalidTokenType","nameLocation":"2219:16:8","nodeType":"ErrorDefinition","parameters":{"id":1106,"nodeType":"ParameterList","parameters":[],"src":"2235:2:8"},"src":"2213:25:8"},{"documentation":{"id":1108,"nodeType":"StructuredDocumentation","src":"2244:76:8","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":1110,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:8","nodeType":"ErrorDefinition","parameters":{"id":1109,"nodeType":"ParameterList","parameters":[],"src":"2356:2:8"},"src":"2325:34:8"},{"documentation":{"id":1111,"nodeType":"StructuredDocumentation","src":"2365:64:8","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":1113,"name":"InvalidTokenDecimals","nameLocation":"2440:20:8","nodeType":"ErrorDefinition","parameters":{"id":1112,"nodeType":"ParameterList","parameters":[],"src":"2460:2:8"},"src":"2434:29:8"},{"documentation":{"id":1114,"nodeType":"StructuredDocumentation","src":"2469:287:8","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":1122,"name":"TokensMismatch","nameLocation":"2767:14:8","nodeType":"ErrorDefinition","parameters":{"id":1121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1116,"mutability":"mutable","name":"pool","nameLocation":"2790:4:8","nodeType":"VariableDeclaration","scope":1122,"src":"2782:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1115,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1118,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:8","nodeType":"VariableDeclaration","scope":1122,"src":"2796:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1117,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1120,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:8","nodeType":"VariableDeclaration","scope":1122,"src":"2819:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1119,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:8"},"src":"2761:79:8"},{"documentation":{"id":1123,"nodeType":"StructuredDocumentation","src":"3071:85:8","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":1125,"name":"BalanceNotSettled","nameLocation":"3167:17:8","nodeType":"ErrorDefinition","parameters":{"id":1124,"nodeType":"ParameterList","parameters":[],"src":"3184:2:8"},"src":"3161:26:8"},{"documentation":{"id":1126,"nodeType":"StructuredDocumentation","src":"3193:97:8","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":1128,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:8","nodeType":"ErrorDefinition","parameters":{"id":1127,"nodeType":"ParameterList","parameters":[],"src":"3319:2:8"},"src":"3295:27:8"},{"documentation":{"id":1129,"nodeType":"StructuredDocumentation","src":"3328:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":1131,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:8","nodeType":"ErrorDefinition","parameters":{"id":1130,"nodeType":"ParameterList","parameters":[],"src":"3468:2:8"},"src":"3438:33:8"},{"documentation":{"id":1132,"nodeType":"StructuredDocumentation","src":"3477:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":1134,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:8","nodeType":"ErrorDefinition","parameters":{"id":1133,"nodeType":"ParameterList","parameters":[],"src":"3613:2:8"},"src":"3587:29:8"},{"documentation":{"id":1135,"nodeType":"StructuredDocumentation","src":"3622:104:8","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":1137,"name":"AfterSwapHookFailed","nameLocation":"3737:19:8","nodeType":"ErrorDefinition","parameters":{"id":1136,"nodeType":"ParameterList","parameters":[],"src":"3756:2:8"},"src":"3731:28:8"},{"documentation":{"id":1138,"nodeType":"StructuredDocumentation","src":"3765:111:8","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":1140,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:8","nodeType":"ErrorDefinition","parameters":{"id":1139,"nodeType":"ParameterList","parameters":[],"src":"3913:2:8"},"src":"3881:35:8"},{"documentation":{"id":1141,"nodeType":"StructuredDocumentation","src":"3922:110:8","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":1143,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:8","nodeType":"ErrorDefinition","parameters":{"id":1142,"nodeType":"ParameterList","parameters":[],"src":"4068:2:8"},"src":"4037:34:8"},{"documentation":{"id":1144,"nodeType":"StructuredDocumentation","src":"4077:113:8","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":1146,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:8","nodeType":"ErrorDefinition","parameters":{"id":1145,"nodeType":"ParameterList","parameters":[],"src":"4229:2:8"},"src":"4195:37:8"},{"documentation":{"id":1147,"nodeType":"StructuredDocumentation","src":"4238:112:8","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":1149,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:8","nodeType":"ErrorDefinition","parameters":{"id":1148,"nodeType":"ParameterList","parameters":[],"src":"4388:2:8"},"src":"4355:36:8"},{"documentation":{"id":1150,"nodeType":"StructuredDocumentation","src":"4397:116:8","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":1152,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:8","nodeType":"ErrorDefinition","parameters":{"id":1151,"nodeType":"ParameterList","parameters":[],"src":"4555:2:8"},"src":"4518:40:8"},{"documentation":{"id":1153,"nodeType":"StructuredDocumentation","src":"4564:115:8","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":1155,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:8","nodeType":"ErrorDefinition","parameters":{"id":1154,"nodeType":"ParameterList","parameters":[],"src":"4720:2:8"},"src":"4684:39:8"},{"documentation":{"id":1156,"nodeType":"StructuredDocumentation","src":"4729:115:8","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":1158,"name":"RouterNotTrusted","nameLocation":"4855:16:8","nodeType":"ErrorDefinition","parameters":{"id":1157,"nodeType":"ParameterList","parameters":[],"src":"4871:2:8"},"src":"4849:25:8"},{"documentation":{"id":1159,"nodeType":"StructuredDocumentation","src":"5097:47:8","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":1161,"name":"AmountGivenZero","nameLocation":"5155:15:8","nodeType":"ErrorDefinition","parameters":{"id":1160,"nodeType":"ParameterList","parameters":[],"src":"5170:2:8"},"src":"5149:24:8"},{"documentation":{"id":1162,"nodeType":"StructuredDocumentation","src":"5179:58:8","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":1164,"name":"CannotSwapSameToken","nameLocation":"5248:19:8","nodeType":"ErrorDefinition","parameters":{"id":1163,"nodeType":"ParameterList","parameters":[],"src":"5267:2:8"},"src":"5242:28:8"},{"documentation":{"id":1165,"nodeType":"StructuredDocumentation","src":"5276:137:8","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":1170,"name":"TokenNotRegistered","nameLocation":"5424:18:8","nodeType":"ErrorDefinition","parameters":{"id":1169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"token","nameLocation":"5450:5:8","nodeType":"VariableDeclaration","scope":1170,"src":"5443:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1167,"nodeType":"UserDefinedTypeName","pathNode":{"id":1166,"name":"IERC20","nameLocations":["5443:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"5443:6:8"},"referencedDeclaration":3290,"src":"5443:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:8"},"src":"5418:39:8"},{"documentation":{"id":1171,"nodeType":"StructuredDocumentation","src":"5463:215:8","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":1177,"name":"SwapLimit","nameLocation":"5689:9:8","nodeType":"ErrorDefinition","parameters":{"id":1176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1173,"mutability":"mutable","name":"amount","nameLocation":"5707:6:8","nodeType":"VariableDeclaration","scope":1177,"src":"5699:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1172,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1175,"mutability":"mutable","name":"limit","nameLocation":"5723:5:8","nodeType":"VariableDeclaration","scope":1177,"src":"5715:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1174,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:8"},"src":"5683:47:8"},{"documentation":{"id":1178,"nodeType":"StructuredDocumentation","src":"5736:228:8","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":1184,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:8","nodeType":"ErrorDefinition","parameters":{"id":1183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1180,"mutability":"mutable","name":"amount","nameLocation":"6005:6:8","nodeType":"VariableDeclaration","scope":1184,"src":"5997:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1179,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1182,"mutability":"mutable","name":"limit","nameLocation":"6021:5:8","nodeType":"VariableDeclaration","scope":1184,"src":"6013:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1181,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:8"},"src":"5969:59:8"},{"documentation":{"id":1185,"nodeType":"StructuredDocumentation","src":"6034:87:8","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":1187,"name":"TradeAmountTooSmall","nameLocation":"6132:19:8","nodeType":"ErrorDefinition","parameters":{"id":1186,"nodeType":"ParameterList","parameters":[],"src":"6151:2:8"},"src":"6126:28:8"},{"documentation":{"id":1188,"nodeType":"StructuredDocumentation","src":"6381:45:8","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":1190,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:8","nodeType":"ErrorDefinition","parameters":{"id":1189,"nodeType":"ParameterList","parameters":[],"src":"6460:2:8"},"src":"6431:32:8"},{"documentation":{"id":1191,"nodeType":"StructuredDocumentation","src":"6469:264:8","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":1200,"name":"AmountInAboveMax","nameLocation":"6744:16:8","nodeType":"ErrorDefinition","parameters":{"id":1199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1194,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:8","nodeType":"VariableDeclaration","scope":1200,"src":"6761:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1193,"nodeType":"UserDefinedTypeName","pathNode":{"id":1192,"name":"IERC20","nameLocations":["6761:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"6761:6:8"},"referencedDeclaration":3290,"src":"6761:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1196,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:8","nodeType":"VariableDeclaration","scope":1200,"src":"6777:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1195,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1198,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:8","nodeType":"VariableDeclaration","scope":1200,"src":"6795:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1197,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:8"},"src":"6738:78:8"},{"documentation":{"id":1201,"nodeType":"StructuredDocumentation","src":"6822:269:8","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":1210,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:8","nodeType":"ErrorDefinition","parameters":{"id":1209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1204,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:8","nodeType":"VariableDeclaration","scope":1210,"src":"7131:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1203,"nodeType":"UserDefinedTypeName","pathNode":{"id":1202,"name":"IERC20","nameLocations":["7131:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"7131:6:8"},"referencedDeclaration":3290,"src":"7131:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1206,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:8","nodeType":"VariableDeclaration","scope":1210,"src":"7147:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1205,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1208,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:8","nodeType":"VariableDeclaration","scope":1210,"src":"7165:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1207,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:8"},"src":"7096:90:8"},{"documentation":{"id":1211,"nodeType":"StructuredDocumentation","src":"7192:245:8","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":1217,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:8","nodeType":"ErrorDefinition","parameters":{"id":1216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1213,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:8","nodeType":"VariableDeclaration","scope":1217,"src":"7469:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1212,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1215,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:8","nodeType":"VariableDeclaration","scope":1217,"src":"7488:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1214,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:8"},"src":"7442:68:8"},{"documentation":{"id":1218,"nodeType":"StructuredDocumentation","src":"7516:75:8","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":1220,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:8","nodeType":"ErrorDefinition","parameters":{"id":1219,"nodeType":"ParameterList","parameters":[],"src":"7634:2:8"},"src":"7596:41:8"},{"documentation":{"id":1221,"nodeType":"StructuredDocumentation","src":"7643:68:8","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":1223,"name":"DoesNotSupportDonation","nameLocation":"7722:22:8","nodeType":"ErrorDefinition","parameters":{"id":1222,"nodeType":"ParameterList","parameters":[],"src":"7744:2:8"},"src":"7716:31:8"},{"documentation":{"id":1224,"nodeType":"StructuredDocumentation","src":"7977:48:8","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":1226,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:8","nodeType":"ErrorDefinition","parameters":{"id":1225,"nodeType":"ParameterList","parameters":[],"src":"8062:2:8"},"src":"8030:35:8"},{"documentation":{"id":1227,"nodeType":"StructuredDocumentation","src":"8071:269:8","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":1236,"name":"AmountOutBelowMin","nameLocation":"8351:17:8","nodeType":"ErrorDefinition","parameters":{"id":1235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1230,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:8","nodeType":"VariableDeclaration","scope":1236,"src":"8369:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1229,"nodeType":"UserDefinedTypeName","pathNode":{"id":1228,"name":"IERC20","nameLocations":["8369:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"8369:6:8"},"referencedDeclaration":3290,"src":"8369:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1232,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:8","nodeType":"VariableDeclaration","scope":1236,"src":"8386:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1231,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1234,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:8","nodeType":"VariableDeclaration","scope":1236,"src":"8405:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1233,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:8"},"src":"8345:82:8"},{"documentation":{"id":1237,"nodeType":"StructuredDocumentation","src":"8433:276:8","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":1246,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:8","nodeType":"ErrorDefinition","parameters":{"id":1245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1240,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:8","nodeType":"VariableDeclaration","scope":1246,"src":"8750:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1239,"nodeType":"UserDefinedTypeName","pathNode":{"id":1238,"name":"IERC20","nameLocations":["8750:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"8750:6:8"},"referencedDeclaration":3290,"src":"8750:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1242,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:8","nodeType":"VariableDeclaration","scope":1246,"src":"8767:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1241,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1244,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:8","nodeType":"VariableDeclaration","scope":1246,"src":"8786:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1243,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:8"},"src":"8714:94:8"},{"documentation":{"id":1247,"nodeType":"StructuredDocumentation","src":"8814:228:8","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":1253,"name":"BptAmountInAboveMax","nameLocation":"9053:19:8","nodeType":"ErrorDefinition","parameters":{"id":1252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1249,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:8","nodeType":"VariableDeclaration","scope":1253,"src":"9073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1248,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1251,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:8","nodeType":"VariableDeclaration","scope":1253,"src":"9091:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1250,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:8"},"src":"9047:65:8"},{"documentation":{"id":1254,"nodeType":"StructuredDocumentation","src":"9118:77:8","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":1256,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:8","nodeType":"ErrorDefinition","parameters":{"id":1255,"nodeType":"ParameterList","parameters":[],"src":"9241:2:8"},"src":"9200:44:8"},{"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"9463:332:8","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":1259,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:8","nodeType":"ErrorDefinition","parameters":{"id":1258,"nodeType":"ParameterList","parameters":[],"src":"9838:2:8"},"src":"9800:41:8"},{"documentation":{"id":1260,"nodeType":"StructuredDocumentation","src":"9847:430:8","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":1262,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:8","nodeType":"ErrorDefinition","parameters":{"id":1261,"nodeType":"ParameterList","parameters":[],"src":"10311:2:8"},"src":"10282:32:8"},{"documentation":{"id":1263,"nodeType":"StructuredDocumentation","src":"10320:433:8","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":1265,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:8","nodeType":"ErrorDefinition","parameters":{"id":1264,"nodeType":"ParameterList","parameters":[],"src":"10788:2:8"},"src":"10758:33:8"},{"documentation":{"id":1266,"nodeType":"StructuredDocumentation","src":"10797:646:8","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":1268,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:8","nodeType":"ErrorDefinition","parameters":{"id":1267,"nodeType":"ParameterList","parameters":[],"src":"11473:2:8"},"src":"11448:28:8"},{"documentation":{"id":1269,"nodeType":"StructuredDocumentation","src":"11482:107:8","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":1271,"name":"PercentageAboveMax","nameLocation":"11600:18:8","nodeType":"ErrorDefinition","parameters":{"id":1270,"nodeType":"ParameterList","parameters":[],"src":"11618:2:8"},"src":"11594:27:8"},{"documentation":{"id":1272,"nodeType":"StructuredDocumentation","src":"11842:78:8","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":1274,"name":"QueriesDisabled","nameLocation":"11931:15:8","nodeType":"ErrorDefinition","parameters":{"id":1273,"nodeType":"ParameterList","parameters":[],"src":"11946:2:8"},"src":"11925:24:8"},{"documentation":{"id":1275,"nodeType":"StructuredDocumentation","src":"11955:84:8","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":1277,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:8","nodeType":"ErrorDefinition","parameters":{"id":1276,"nodeType":"ParameterList","parameters":[],"src":"12076:2:8"},"src":"12044:35:8"},{"documentation":{"id":1278,"nodeType":"StructuredDocumentation","src":"12302:104:8","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":1282,"name":"PoolInRecoveryMode","nameLocation":"12417:18:8","nodeType":"ErrorDefinition","parameters":{"id":1281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1280,"mutability":"mutable","name":"pool","nameLocation":"12444:4:8","nodeType":"VariableDeclaration","scope":1282,"src":"12436:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1279,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:8"},"src":"12411:39:8"},{"documentation":{"id":1283,"nodeType":"StructuredDocumentation","src":"12456:101:8","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":1287,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:8","nodeType":"ErrorDefinition","parameters":{"id":1286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1285,"mutability":"mutable","name":"pool","nameLocation":"12598:4:8","nodeType":"VariableDeclaration","scope":1287,"src":"12590:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1284,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:8"},"src":"12562:42:8"},{"documentation":{"id":1288,"nodeType":"StructuredDocumentation","src":"12828:206:8","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":1292,"name":"SenderIsNotVault","nameLocation":"13045:16:8","nodeType":"ErrorDefinition","parameters":{"id":1291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1290,"mutability":"mutable","name":"sender","nameLocation":"13070:6:8","nodeType":"VariableDeclaration","scope":1292,"src":"13062:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1289,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:8"},"src":"13039:39:8"},{"documentation":{"id":1293,"nodeType":"StructuredDocumentation","src":"13303:79:8","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":1295,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:8","nodeType":"ErrorDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[],"src":"13425:2:8"},"src":"13387:41:8"},{"documentation":{"id":1296,"nodeType":"StructuredDocumentation","src":"13434:73:8","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":1298,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:8","nodeType":"ErrorDefinition","parameters":{"id":1297,"nodeType":"ParameterList","parameters":[],"src":"13551:2:8"},"src":"13512:42:8"},{"documentation":{"id":1299,"nodeType":"StructuredDocumentation","src":"13560:76:8","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":1301,"name":"VaultPaused","nameLocation":"13647:11:8","nodeType":"ErrorDefinition","parameters":{"id":1300,"nodeType":"ParameterList","parameters":[],"src":"13658:2:8"},"src":"13641:20:8"},{"documentation":{"id":1302,"nodeType":"StructuredDocumentation","src":"13667:73:8","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":1304,"name":"VaultNotPaused","nameLocation":"13751:14:8","nodeType":"ErrorDefinition","parameters":{"id":1303,"nodeType":"ParameterList","parameters":[],"src":"13765:2:8"},"src":"13745:23:8"},{"documentation":{"id":1305,"nodeType":"StructuredDocumentation","src":"13774:79:8","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":1307,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:8","nodeType":"ErrorDefinition","parameters":{"id":1306,"nodeType":"ParameterList","parameters":[],"src":"13887:2:8"},"src":"13858:32:8"},{"documentation":{"id":1308,"nodeType":"StructuredDocumentation","src":"13896:123:8","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":1312,"name":"PoolPaused","nameLocation":"14030:10:8","nodeType":"ErrorDefinition","parameters":{"id":1311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1310,"mutability":"mutable","name":"pool","nameLocation":"14049:4:8","nodeType":"VariableDeclaration","scope":1312,"src":"14041:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1309,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:8"},"src":"14024:31:8"},{"documentation":{"id":1313,"nodeType":"StructuredDocumentation","src":"14061:124:8","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":1317,"name":"PoolNotPaused","nameLocation":"14196:13:8","nodeType":"ErrorDefinition","parameters":{"id":1316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1315,"mutability":"mutable","name":"pool","nameLocation":"14218:4:8","nodeType":"VariableDeclaration","scope":1317,"src":"14210:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1314,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:8"},"src":"14190:34:8"},{"documentation":{"id":1318,"nodeType":"StructuredDocumentation","src":"14230:119:8","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":1322,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:8","nodeType":"ErrorDefinition","parameters":{"id":1321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1320,"mutability":"mutable","name":"pool","nameLocation":"14391:4:8","nodeType":"VariableDeclaration","scope":1322,"src":"14383:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1319,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:8"},"src":"14354:43:8"},{"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"14628:163:8","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":1328,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:8","nodeType":"ErrorDefinition","parameters":{"id":1327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1326,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:8","nodeType":"VariableDeclaration","scope":1328,"src":"14827:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1325,"nodeType":"UserDefinedTypeName","pathNode":{"id":1324,"name":"IERC4626","nameLocations":["14827:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"14827:8:8"},"referencedDeclaration":3212,"src":"14827:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:8"},"src":"14796:54:8"},{"documentation":{"id":1329,"nodeType":"StructuredDocumentation","src":"14856:159:8","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":1334,"name":"BufferNotInitialized","nameLocation":"15026:20:8","nodeType":"ErrorDefinition","parameters":{"id":1333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1332,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:8","nodeType":"VariableDeclaration","scope":1334,"src":"15047:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1331,"nodeType":"UserDefinedTypeName","pathNode":{"id":1330,"name":"IERC4626","nameLocations":["15047:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"15047:8:8"},"referencedDeclaration":3212,"src":"15047:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:8"},"src":"15020:50:8"},{"documentation":{"id":1335,"nodeType":"StructuredDocumentation","src":"15076:90:8","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":1337,"name":"NotEnoughBufferShares","nameLocation":"15177:21:8","nodeType":"ErrorDefinition","parameters":{"id":1336,"nodeType":"ParameterList","parameters":[],"src":"15198:2:8"},"src":"15171:30:8"},{"documentation":{"id":1338,"nodeType":"StructuredDocumentation","src":"15207:436:8","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":1345,"name":"WrongUnderlyingToken","nameLocation":"15654:20:8","nodeType":"ErrorDefinition","parameters":{"id":1344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1341,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:8","nodeType":"VariableDeclaration","scope":1345,"src":"15675:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1340,"nodeType":"UserDefinedTypeName","pathNode":{"id":1339,"name":"IERC4626","nameLocations":["15675:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"15675:8:8"},"referencedDeclaration":3212,"src":"15675:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1343,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:8","nodeType":"VariableDeclaration","scope":1345,"src":"15698:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1342,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:8"},"src":"15648:75:8"},{"documentation":{"id":1346,"nodeType":"StructuredDocumentation","src":"15729:322:8","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":1351,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:8","nodeType":"ErrorDefinition","parameters":{"id":1350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1349,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:8","nodeType":"VariableDeclaration","scope":1351,"src":"16085:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1348,"nodeType":"UserDefinedTypeName","pathNode":{"id":1347,"name":"IERC4626","nameLocations":["16085:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"16085:8:8"},"referencedDeclaration":3212,"src":"16085:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:8"},"src":"16056:52:8"},{"documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"16114:183:8","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":1357,"name":"WrapAmountTooSmall","nameLocation":"16308:18:8","nodeType":"ErrorDefinition","parameters":{"id":1356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1355,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:8","nodeType":"VariableDeclaration","scope":1357,"src":"16327:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1354,"nodeType":"UserDefinedTypeName","pathNode":{"id":1353,"name":"IERC4626","nameLocations":["16327:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"16327:8:8"},"referencedDeclaration":3212,"src":"16327:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:8"},"src":"16302:48:8"},{"documentation":{"id":1358,"nodeType":"StructuredDocumentation","src":"16356:70:8","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":1360,"name":"VaultBuffersArePaused","nameLocation":"16437:21:8","nodeType":"ErrorDefinition","parameters":{"id":1359,"nodeType":"ParameterList","parameters":[],"src":"16458:2:8"},"src":"16431:30:8"},{"documentation":{"id":1361,"nodeType":"StructuredDocumentation","src":"16467:58:8","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":1363,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:8","nodeType":"ErrorDefinition","parameters":{"id":1362,"nodeType":"ParameterList","parameters":[],"src":"16563:2:8"},"src":"16530:36:8"},{"documentation":{"id":1364,"nodeType":"StructuredDocumentation","src":"16572:60:8","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":1366,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:8","nodeType":"ErrorDefinition","parameters":{"id":1365,"nodeType":"ParameterList","parameters":[],"src":"16667:2:8"},"src":"16637:33:8"},{"documentation":{"id":1367,"nodeType":"StructuredDocumentation","src":"16676:173:8","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":1371,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:8","nodeType":"ErrorDefinition","parameters":{"id":1370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1369,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:8","nodeType":"VariableDeclaration","scope":1371,"src":"16884:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1368,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:8"},"src":"16854:51:8"},{"documentation":{"id":1372,"nodeType":"StructuredDocumentation","src":"16911:97:8","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":1381,"name":"NotEnoughUnderlying","nameLocation":"17019:19:8","nodeType":"ErrorDefinition","parameters":{"id":1380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1375,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:8","nodeType":"VariableDeclaration","scope":1381,"src":"17039:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1374,"nodeType":"UserDefinedTypeName","pathNode":{"id":1373,"name":"IERC4626","nameLocations":["17039:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"17039:8:8"},"referencedDeclaration":3212,"src":"17039:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1377,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:8","nodeType":"VariableDeclaration","scope":1381,"src":"17062:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1376,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1379,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:8","nodeType":"VariableDeclaration","scope":1381,"src":"17096:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1378,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:8"},"src":"17013:115:8"},{"documentation":{"id":1382,"nodeType":"StructuredDocumentation","src":"17134:94:8","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":1391,"name":"NotEnoughWrapped","nameLocation":"17239:16:8","nodeType":"ErrorDefinition","parameters":{"id":1390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1385,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:8","nodeType":"VariableDeclaration","scope":1391,"src":"17256:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1384,"nodeType":"UserDefinedTypeName","pathNode":{"id":1383,"name":"IERC4626","nameLocations":["17256:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"17256:8:8"},"referencedDeclaration":3212,"src":"17256:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1387,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:8","nodeType":"VariableDeclaration","scope":1391,"src":"17279:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1386,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1389,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:8","nodeType":"VariableDeclaration","scope":1391,"src":"17310:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1388,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:8"},"src":"17233:106:8"},{"documentation":{"id":1392,"nodeType":"StructuredDocumentation","src":"17345:76:8","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":1398,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:8","nodeType":"ErrorDefinition","parameters":{"id":1397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1394,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:8","nodeType":"VariableDeclaration","scope":1398,"src":"17453:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1393,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1396,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:8","nodeType":"VariableDeclaration","scope":1398,"src":"17475:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1395,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:8"},"src":"17426:74:8"},{"documentation":{"id":1399,"nodeType":"StructuredDocumentation","src":"17727:87:8","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":1401,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:8","nodeType":"ErrorDefinition","parameters":{"id":1400,"nodeType":"ParameterList","parameters":[],"src":"17858:2:8"},"src":"17819:42:8"},{"documentation":{"id":1402,"nodeType":"StructuredDocumentation","src":"17867:48:8","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":1404,"name":"CannotReceiveEth","nameLocation":"17926:16:8","nodeType":"ErrorDefinition","parameters":{"id":1403,"nodeType":"ParameterList","parameters":[],"src":"17942:2:8"},"src":"17920:25:8"},{"documentation":{"id":1405,"nodeType":"StructuredDocumentation","src":"17951:156:8","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":1407,"name":"NotVaultDelegateCall","nameLocation":"18118:20:8","nodeType":"ErrorDefinition","parameters":{"id":1406,"nodeType":"ParameterList","parameters":[],"src":"18138:2:8"},"src":"18112:29:8"},{"documentation":{"id":1408,"nodeType":"StructuredDocumentation","src":"18147:89:8","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":1410,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:8","nodeType":"ErrorDefinition","parameters":{"id":1409,"nodeType":"ParameterList","parameters":[],"src":"18276:2:8"},"src":"18241:38:8"},{"documentation":{"id":1411,"nodeType":"StructuredDocumentation","src":"18285:96:8","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1413,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:8","nodeType":"ErrorDefinition","parameters":{"id":1412,"nodeType":"ParameterList","parameters":[],"src":"18428:2:8"},"src":"18386:45:8"},{"documentation":{"id":1414,"nodeType":"StructuredDocumentation","src":"18437:85:8","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":1416,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:8","nodeType":"ErrorDefinition","parameters":{"id":1415,"nodeType":"ParameterList","parameters":[],"src":"18558:2:8"},"src":"18527:34:8"},{"documentation":{"id":1417,"nodeType":"StructuredDocumentation","src":"18567:54:8","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":1419,"name":"QuoteResultSpoofed","nameLocation":"18632:18:8","nodeType":"ErrorDefinition","parameters":{"id":1418,"nodeType":"ParameterList","parameters":[],"src":"18650:2:8"},"src":"18626:27:8"}],"scope":1421,"src":"316:18339:8","usedErrors":[1065,1070,1075,1080,1089,1095,1098,1101,1104,1107,1110,1113,1122,1125,1128,1131,1134,1137,1140,1143,1146,1149,1152,1155,1158,1161,1164,1170,1177,1184,1187,1190,1200,1210,1217,1220,1223,1226,1236,1246,1253,1256,1259,1262,1265,1268,1271,1274,1277,1282,1287,1292,1295,1298,1301,1304,1307,1312,1317,1322,1328,1334,1337,1345,1351,1357,1360,1363,1366,1371,1381,1391,1398,1401,1404,1407,1410,1413,1416,1419],"usedEvents":[]}],"src":"46:18610:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AddLiquidityParams":[2475],"AfterSwapParams":[2453],"BufferWrapOrUnwrapParams":[2514],"FEE_BITLENGTH":[2517],"FEE_SCALING_FACTOR":[2520],"HookFlags":[2279],"HooksConfig":[2303],"IAuthorizer":[218],"IERC20":[3290],"IERC4626":[3212],"IHooks":[420],"IProtocolFeeController":[725],"IRateProvider":[24],"IVaultEvents":[1659],"LiquidityManagement":[2232],"MAX_FEE_PERCENTAGE":[2523],"PoolConfig":[2257],"PoolConfigBits":[2234],"PoolData":[2381],"PoolRoleAccounts":[2329],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"RemoveLiquidityParams":[2496],"Rounding":[2384],"SwapKind":[2387],"SwapState":[2313],"TokenConfig":[2346],"TokenInfo":[2356],"TokenType":[2333],"VaultState":[2321],"VaultSwapParams":[2406],"WrappingDirection":[2499]},"id":1660,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1422,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":3213,"src":"72:75:9","symbolAliases":[{"foreign":{"id":1423,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"81:8:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":3291,"src":"148:72:9","symbolAliases":[{"foreign":{"id":1425,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"157:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1428,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":726,"src":"222:70:9","symbolAliases":[{"foreign":{"id":1427,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":725,"src":"231:22:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":219,"src":"293:48:9","symbolAliases":[{"foreign":{"id":1429,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"302:11:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":421,"src":"342:38:9","symbolAliases":[{"foreign":{"id":1431,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"351:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1433,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1660,"sourceUnit":2524,"src":"381:26:9","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":1434,"nodeType":"StructuredDocumentation","src":"409:91:9","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1659,"linearizedBaseContracts":[1659],"name":"IVaultEvents","nameLocation":"510:12:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1435,"nodeType":"StructuredDocumentation","src":"529:657:9","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":1458,"name":"PoolRegistered","nameLocation":"1197:14:9","nodeType":"EventDefinition","parameters":{"id":1457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1437,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:9","nodeType":"VariableDeclaration","scope":1458,"src":"1221:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1436,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1439,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:9","nodeType":"VariableDeclaration","scope":1458,"src":"1251:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1438,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1443,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:9","nodeType":"VariableDeclaration","scope":1458,"src":"1284:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1441,"nodeType":"UserDefinedTypeName","pathNode":{"id":1440,"name":"TokenConfig","nameLocations":["1284:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2346,"src":"1284:11:9"},"referencedDeclaration":2346,"src":"1284:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2346_storage_ptr","typeString":"struct TokenConfig"}},"id":1442,"nodeType":"ArrayTypeName","src":"1284:13:9","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1445,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:9","nodeType":"VariableDeclaration","scope":1458,"src":"1319:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1444,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1447,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:9","nodeType":"VariableDeclaration","scope":1458,"src":"1354:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1446,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1450,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:9","nodeType":"VariableDeclaration","scope":1458,"src":"1389:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1449,"nodeType":"UserDefinedTypeName","pathNode":{"id":1448,"name":"PoolRoleAccounts","nameLocations":["1389:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2329,"src":"1389:16:9"},"referencedDeclaration":2329,"src":"1389:16:9","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1453,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:9","nodeType":"VariableDeclaration","scope":1458,"src":"1428:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2303_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1452,"nodeType":"UserDefinedTypeName","pathNode":{"id":1451,"name":"HooksConfig","nameLocations":["1428:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2303,"src":"1428:11:9"},"referencedDeclaration":2303,"src":"1428:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2303_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":1456,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:9","nodeType":"VariableDeclaration","scope":1458,"src":"1461:39:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1455,"nodeType":"UserDefinedTypeName","pathNode":{"id":1454,"name":"LiquidityManagement","nameLocations":["1461:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"1461:19:9"},"referencedDeclaration":2232,"src":"1461:19:9","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:9"},"src":"1191:316:9"},{"anonymous":false,"documentation":{"id":1459,"nodeType":"StructuredDocumentation","src":"1513:120:9","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":1463,"name":"PoolInitialized","nameLocation":"1644:15:9","nodeType":"EventDefinition","parameters":{"id":1462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1461,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:9","nodeType":"VariableDeclaration","scope":1463,"src":"1660:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1460,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:9"},"src":"1638:44:9"},{"anonymous":false,"documentation":{"id":1464,"nodeType":"StructuredDocumentation","src":"1688:478:9","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":1482,"name":"Swap","nameLocation":"2177:4:9","nodeType":"EventDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1466,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:9","nodeType":"VariableDeclaration","scope":1482,"src":"2191:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1465,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1469,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:9","nodeType":"VariableDeclaration","scope":1482,"src":"2221:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1468,"nodeType":"UserDefinedTypeName","pathNode":{"id":1467,"name":"IERC20","nameLocations":["2221:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2221:6:9"},"referencedDeclaration":3290,"src":"2221:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1472,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:9","nodeType":"VariableDeclaration","scope":1482,"src":"2253:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1471,"nodeType":"UserDefinedTypeName","pathNode":{"id":1470,"name":"IERC20","nameLocations":["2253:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2253:6:9"},"referencedDeclaration":3290,"src":"2253:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1474,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:9","nodeType":"VariableDeclaration","scope":1482,"src":"2286:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1473,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1476,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:9","nodeType":"VariableDeclaration","scope":1482,"src":"2312:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1475,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1478,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:9","nodeType":"VariableDeclaration","scope":1482,"src":"2339:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1477,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1480,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:9","nodeType":"VariableDeclaration","scope":1482,"src":"2374:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1479,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:9"},"src":"2171:231:9"},{"anonymous":false,"documentation":{"id":1483,"nodeType":"StructuredDocumentation","src":"2408:352:9","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":1494,"name":"Wrap","nameLocation":"2771:4:9","nodeType":"EventDefinition","parameters":{"id":1493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1486,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:9","nodeType":"VariableDeclaration","scope":1494,"src":"2785:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1485,"nodeType":"UserDefinedTypeName","pathNode":{"id":1484,"name":"IERC4626","nameLocations":["2785:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"2785:8:9"},"referencedDeclaration":3212,"src":"2785:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1488,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:9","nodeType":"VariableDeclaration","scope":1494,"src":"2824:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1487,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1490,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:9","nodeType":"VariableDeclaration","scope":1494,"src":"2861:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1489,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1492,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:9","nodeType":"VariableDeclaration","scope":1494,"src":"2891:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1491,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:9"},"src":"2765:155:9"},{"anonymous":false,"documentation":{"id":1495,"nodeType":"StructuredDocumentation","src":"2926:355:9","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":1506,"name":"Unwrap","nameLocation":"3292:6:9","nodeType":"EventDefinition","parameters":{"id":1505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1498,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:9","nodeType":"VariableDeclaration","scope":1506,"src":"3308:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1497,"nodeType":"UserDefinedTypeName","pathNode":{"id":1496,"name":"IERC4626","nameLocations":["3308:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"3308:8:9"},"referencedDeclaration":3212,"src":"3308:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1500,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:9","nodeType":"VariableDeclaration","scope":1506,"src":"3347:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1499,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1502,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:9","nodeType":"VariableDeclaration","scope":1506,"src":"3377:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1501,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1504,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:9","nodeType":"VariableDeclaration","scope":1506,"src":"3414:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1503,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:9"},"src":"3286:157:9"},{"anonymous":false,"documentation":{"id":1507,"nodeType":"StructuredDocumentation","src":"3449:562:9","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":1524,"name":"LiquidityAdded","nameLocation":"4022:14:9","nodeType":"EventDefinition","parameters":{"id":1523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1509,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:9","nodeType":"VariableDeclaration","scope":1524,"src":"4046:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1508,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1511,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:9","nodeType":"VariableDeclaration","scope":1524,"src":"4076:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1510,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1514,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:9","nodeType":"VariableDeclaration","scope":1524,"src":"4119:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"},"typeName":{"id":1513,"nodeType":"UserDefinedTypeName","pathNode":{"id":1512,"name":"AddLiquidityKind","nameLocations":["4119:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2459,"src":"4119:16:9"},"referencedDeclaration":2459,"src":"4119:16:9","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1516,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:9","nodeType":"VariableDeclaration","scope":1524,"src":"4158:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1515,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1519,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:9","nodeType":"VariableDeclaration","scope":1524,"src":"4187:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1517,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1518,"nodeType":"ArrayTypeName","src":"4187:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1522,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:9","nodeType":"VariableDeclaration","scope":1524,"src":"4222:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1520,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1521,"nodeType":"ArrayTypeName","src":"4222:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:9"},"src":"4016:240:9"},{"anonymous":false,"documentation":{"id":1525,"nodeType":"StructuredDocumentation","src":"4262:548:9","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":1542,"name":"LiquidityRemoved","nameLocation":"4821:16:9","nodeType":"EventDefinition","parameters":{"id":1541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1527,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:9","nodeType":"VariableDeclaration","scope":1542,"src":"4847:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1526,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1529,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:9","nodeType":"VariableDeclaration","scope":1542,"src":"4877:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1528,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1532,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:9","nodeType":"VariableDeclaration","scope":1542,"src":"4920:32:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1531,"nodeType":"UserDefinedTypeName","pathNode":{"id":1530,"name":"RemoveLiquidityKind","nameLocations":["4920:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2480,"src":"4920:19:9"},"referencedDeclaration":2480,"src":"4920:19:9","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1534,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:9","nodeType":"VariableDeclaration","scope":1542,"src":"4962:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1533,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1537,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:9","nodeType":"VariableDeclaration","scope":1542,"src":"4991:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1535,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1536,"nodeType":"ArrayTypeName","src":"4991:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1540,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:9","nodeType":"VariableDeclaration","scope":1542,"src":"5028:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1538,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1539,"nodeType":"ArrayTypeName","src":"5028:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:9"},"src":"4815:247:9"},{"anonymous":false,"documentation":{"id":1543,"nodeType":"StructuredDocumentation","src":"5068:114:9","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":1547,"name":"VaultPausedStateChanged","nameLocation":"5193:23:9","nodeType":"EventDefinition","parameters":{"id":1546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1545,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:9","nodeType":"VariableDeclaration","scope":1547,"src":"5217:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1544,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:9"},"src":"5187:43:9"},{"anonymous":false,"documentation":{"id":1548,"nodeType":"StructuredDocumentation","src":"5236:87:9","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":1550,"name":"VaultQueriesDisabled","nameLocation":"5334:20:9","nodeType":"EventDefinition","parameters":{"id":1549,"nodeType":"ParameterList","parameters":[],"src":"5354:2:9"},"src":"5328:29:9"},{"anonymous":false,"documentation":{"id":1551,"nodeType":"StructuredDocumentation","src":"5363:85:9","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":1553,"name":"VaultQueriesEnabled","nameLocation":"5459:19:9","nodeType":"EventDefinition","parameters":{"id":1552,"nodeType":"ParameterList","parameters":[],"src":"5478:2:9"},"src":"5453:28:9"},{"anonymous":false,"documentation":{"id":1554,"nodeType":"StructuredDocumentation","src":"5487:171:9","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":1560,"name":"PoolPausedStateChanged","nameLocation":"5669:22:9","nodeType":"EventDefinition","parameters":{"id":1559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1556,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:9","nodeType":"VariableDeclaration","scope":1560,"src":"5692:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1555,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1558,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:9","nodeType":"VariableDeclaration","scope":1560,"src":"5714:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1557,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:9"},"src":"5663:64:9"},{"anonymous":false,"documentation":{"id":1561,"nodeType":"StructuredDocumentation","src":"5733:158:9","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":1567,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:9","nodeType":"EventDefinition","parameters":{"id":1566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1563,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:9","nodeType":"VariableDeclaration","scope":1567,"src":"5927:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1562,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1565,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:9","nodeType":"VariableDeclaration","scope":1567,"src":"5949:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1564,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:9"},"src":"5896:80:9"},{"anonymous":false,"documentation":{"id":1568,"nodeType":"StructuredDocumentation","src":"5982:170:9","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":1574,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:9","nodeType":"EventDefinition","parameters":{"id":1573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1570,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:9","nodeType":"VariableDeclaration","scope":1574,"src":"6192:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1569,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1572,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:9","nodeType":"VariableDeclaration","scope":1574,"src":"6214:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1571,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:9"},"src":"6157:76:9"},{"anonymous":false,"documentation":{"id":1575,"nodeType":"StructuredDocumentation","src":"6239:353:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":1581,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:9","nodeType":"EventDefinition","parameters":{"id":1580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1577,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:9","nodeType":"VariableDeclaration","scope":1581,"src":"6637:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1576,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1579,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:9","nodeType":"VariableDeclaration","scope":1581,"src":"6659:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1578,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:9"},"src":"6597:98:9"},{"anonymous":false,"documentation":{"id":1582,"nodeType":"StructuredDocumentation","src":"6701:357:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":1588,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:9","nodeType":"EventDefinition","parameters":{"id":1587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:9","nodeType":"VariableDeclaration","scope":1588,"src":"7104:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1583,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1586,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:9","nodeType":"VariableDeclaration","scope":1588,"src":"7126:35:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1585,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:9"},"src":"7063:100:9"},{"anonymous":false,"documentation":{"id":1589,"nodeType":"StructuredDocumentation","src":"7169:132:9","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":1594,"name":"AuthorizerChanged","nameLocation":"7312:17:9","nodeType":"EventDefinition","parameters":{"id":1593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1592,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:9","nodeType":"VariableDeclaration","scope":1594,"src":"7330:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"},"typeName":{"id":1591,"nodeType":"UserDefinedTypeName","pathNode":{"id":1590,"name":"IAuthorizer","nameLocations":["7330:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"7330:11:9"},"referencedDeclaration":218,"src":"7330:11:9","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:9"},"src":"7306:59:9"},{"anonymous":false,"documentation":{"id":1595,"nodeType":"StructuredDocumentation","src":"7371:180:9","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":1600,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:9","nodeType":"EventDefinition","parameters":{"id":1599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1598,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:9","nodeType":"VariableDeclaration","scope":1600,"src":"7591:55:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"},"typeName":{"id":1597,"nodeType":"UserDefinedTypeName","pathNode":{"id":1596,"name":"IProtocolFeeController","nameLocations":["7591:22:9"],"nodeType":"IdentifierPath","referencedDeclaration":725,"src":"7591:22:9"},"referencedDeclaration":725,"src":"7591:22:9","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:9"},"src":"7556:92:9"},{"anonymous":false,"documentation":{"id":1601,"nodeType":"StructuredDocumentation","src":"7654:553:9","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":1612,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:9","nodeType":"EventDefinition","parameters":{"id":1611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:9","nodeType":"VariableDeclaration","scope":1612,"src":"8250:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1603,"nodeType":"UserDefinedTypeName","pathNode":{"id":1602,"name":"IERC4626","nameLocations":["8250:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"8250:8:9"},"referencedDeclaration":3212,"src":"8250:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1606,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:9","nodeType":"VariableDeclaration","scope":1612,"src":"8289:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1605,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1608,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:9","nodeType":"VariableDeclaration","scope":1612,"src":"8323:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1607,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1610,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:9","nodeType":"VariableDeclaration","scope":1612,"src":"8354:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1609,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:9"},"src":"8212:171:9"},{"anonymous":false,"documentation":{"id":1613,"nodeType":"StructuredDocumentation","src":"8389:570:9","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":1622,"name":"BufferSharesMinted","nameLocation":"8970:18:9","nodeType":"EventDefinition","parameters":{"id":1621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1616,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:9","nodeType":"VariableDeclaration","scope":1622,"src":"8989:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1615,"nodeType":"UserDefinedTypeName","pathNode":{"id":1614,"name":"IERC4626","nameLocations":["8989:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"8989:8:9"},"referencedDeclaration":3212,"src":"8989:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1618,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:9","nodeType":"VariableDeclaration","scope":1622,"src":"9020:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1617,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1620,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:9","nodeType":"VariableDeclaration","scope":1622,"src":"9040:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1619,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:9"},"src":"8964:98:9"},{"anonymous":false,"documentation":{"id":1623,"nodeType":"StructuredDocumentation","src":"9068:571:9","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":1632,"name":"BufferSharesBurned","nameLocation":"9650:18:9","nodeType":"EventDefinition","parameters":{"id":1631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1626,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:9","nodeType":"VariableDeclaration","scope":1632,"src":"9669:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1625,"nodeType":"UserDefinedTypeName","pathNode":{"id":1624,"name":"IERC4626","nameLocations":["9669:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"9669:8:9"},"referencedDeclaration":3212,"src":"9669:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1628,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:9","nodeType":"VariableDeclaration","scope":1632,"src":"9700:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1627,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1630,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:9","nodeType":"VariableDeclaration","scope":1632,"src":"9722:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1629,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:9"},"src":"9644:100:9"},{"anonymous":false,"documentation":{"id":1633,"nodeType":"StructuredDocumentation","src":"9750:509:9","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":1644,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:9","nodeType":"EventDefinition","parameters":{"id":1643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1636,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:9","nodeType":"VariableDeclaration","scope":1644,"src":"10306:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1635,"nodeType":"UserDefinedTypeName","pathNode":{"id":1634,"name":"IERC4626","nameLocations":["10306:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"10306:8:9"},"referencedDeclaration":3212,"src":"10306:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1638,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:9","nodeType":"VariableDeclaration","scope":1644,"src":"10345:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1637,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1640,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:9","nodeType":"VariableDeclaration","scope":1644,"src":"10379:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1639,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1642,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:9","nodeType":"VariableDeclaration","scope":1644,"src":"10410:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1641,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:9"},"src":"10264:175:9"},{"anonymous":false,"documentation":{"id":1645,"nodeType":"StructuredDocumentation","src":"10445:278:9","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":1649,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:9","nodeType":"EventDefinition","parameters":{"id":1648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1647,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:9","nodeType":"VariableDeclaration","scope":1649,"src":"10765:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1646,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:9"},"src":"10728:50:9"},{"anonymous":false,"documentation":{"id":1650,"nodeType":"StructuredDocumentation","src":"10784:194:9","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":1658,"name":"VaultAuxiliary","nameLocation":"10989:14:9","nodeType":"EventDefinition","parameters":{"id":1657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1652,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:9","nodeType":"VariableDeclaration","scope":1658,"src":"11004:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1651,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1654,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:9","nodeType":"VariableDeclaration","scope":1658,"src":"11026:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1653,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1656,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:9","nodeType":"VariableDeclaration","scope":1658,"src":"11052:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1655,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:9"},"src":"10983:86:9"}],"scope":1660,"src":"500:10571:9","usedErrors":[],"usedEvents":[1458,1463,1482,1494,1506,1524,1542,1547,1550,1553,1560,1567,1574,1581,1588,1594,1600,1612,1622,1632,1644,1649,1658]}],"src":"46:11026:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AddLiquidityParams":[2475],"AfterSwapParams":[2453],"BufferWrapOrUnwrapParams":[2514],"FEE_BITLENGTH":[2517],"FEE_SCALING_FACTOR":[2520],"HookFlags":[2279],"HooksConfig":[2303],"IAuthorizer":[218],"IERC20":[3290],"IERC4626":[3212],"IHooks":[420],"IProtocolFeeController":[725],"IRateProvider":[24],"IVault":[763],"IVaultExtension":[2078],"LiquidityManagement":[2232],"MAX_FEE_PERCENTAGE":[2523],"PoolConfig":[2257],"PoolConfigBits":[2234],"PoolData":[2381],"PoolRoleAccounts":[2329],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"RemoveLiquidityParams":[2496],"Rounding":[2384],"SwapKind":[2387],"SwapState":[2313],"TokenConfig":[2346],"TokenInfo":[2356],"TokenType":[2333],"VaultState":[2321],"VaultSwapParams":[2406],"WrappingDirection":[2499]},"id":2079,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1661,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1663,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":3213,"src":"72:75:10","symbolAliases":[{"foreign":{"id":1662,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"81:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1665,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":3291,"src":"148:72:10","symbolAliases":[{"foreign":{"id":1664,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"157:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1667,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":219,"src":"222:48:10","symbolAliases":[{"foreign":{"id":1666,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"231:11:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1669,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":726,"src":"271:70:10","symbolAliases":[{"foreign":{"id":1668,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":725,"src":"280:22:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1671,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":764,"src":"342:38:10","symbolAliases":[{"foreign":{"id":1670,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"351:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1673,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":421,"src":"381:38:10","symbolAliases":[{"foreign":{"id":1672,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":420,"src":"390:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1674,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2079,"sourceUnit":2524,"src":"420:26:10","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":1675,"nodeType":"StructuredDocumentation","src":"448:318:10","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":2078,"linearizedBaseContracts":[2078],"name":"IVaultExtension","nameLocation":"777:15:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1676,"nodeType":"StructuredDocumentation","src":"1025:206:10","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":1682,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:10","nodeType":"FunctionDefinition","parameters":{"id":1677,"nodeType":"ParameterList","parameters":[],"src":"1250:2:10"},"returnParameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1682,"src":"1276:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":1679,"nodeType":"UserDefinedTypeName","pathNode":{"id":1678,"name":"IVault","nameLocations":["1276:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"1276:6:10"},"referencedDeclaration":763,"src":"1276:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:10"},"scope":2078,"src":"1236:48:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1683,"nodeType":"StructuredDocumentation","src":"1290:202:10","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":1688,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:10","nodeType":"FunctionDefinition","parameters":{"id":1684,"nodeType":"ParameterList","parameters":[],"src":"1519:2:10"},"returnParameters":{"id":1687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1686,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:10","nodeType":"VariableDeclaration","scope":1688,"src":"1545:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1685,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:10"},"scope":2078,"src":"1497:68:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1689,"nodeType":"StructuredDocumentation","src":"1793:254:10","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":1694,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:10","nodeType":"FunctionDefinition","parameters":{"id":1690,"nodeType":"ParameterList","parameters":[],"src":"2071:2:10"},"returnParameters":{"id":1693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1692,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:10","nodeType":"VariableDeclaration","scope":1694,"src":"2097:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1691,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:10"},"scope":2078,"src":"2052:60:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1695,"nodeType":"StructuredDocumentation","src":"2118:141:10","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":1700,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:10","nodeType":"FunctionDefinition","parameters":{"id":1696,"nodeType":"ParameterList","parameters":[],"src":"2293:2:10"},"returnParameters":{"id":1699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1698,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:10","nodeType":"VariableDeclaration","scope":1700,"src":"2319:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1697,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:10"},"scope":2078,"src":"2264:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1701,"nodeType":"StructuredDocumentation","src":"2352:284:10","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":1709,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:10","nodeType":"FunctionDefinition","parameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"token","nameLocation":"2671:5:10","nodeType":"VariableDeclaration","scope":1709,"src":"2664:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1703,"nodeType":"UserDefinedTypeName","pathNode":{"id":1702,"name":"IERC20","nameLocations":["2664:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2664:6:10"},"referencedDeclaration":3290,"src":"2664:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:10"},"returnParameters":{"id":1708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1707,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:10","nodeType":"VariableDeclaration","scope":1709,"src":"2701:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1706,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:10"},"scope":2078,"src":"2641:79:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1710,"nodeType":"StructuredDocumentation","src":"2726:230:10","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":1718,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:10","nodeType":"FunctionDefinition","parameters":{"id":1714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1713,"mutability":"mutable","name":"token","nameLocation":"2991:5:10","nodeType":"VariableDeclaration","scope":1718,"src":"2984:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1712,"nodeType":"UserDefinedTypeName","pathNode":{"id":1711,"name":"IERC20","nameLocations":["2984:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2984:6:10"},"referencedDeclaration":3290,"src":"2984:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:10"},"returnParameters":{"id":1717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1716,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:10","nodeType":"VariableDeclaration","scope":1718,"src":"3021:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1715,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:10"},"scope":2078,"src":"2961:83:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1719,"nodeType":"StructuredDocumentation","src":"3050:944:10","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":1726,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:10","nodeType":"FunctionDefinition","parameters":{"id":1722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1721,"mutability":"mutable","name":"pool","nameLocation":"4042:4:10","nodeType":"VariableDeclaration","scope":1726,"src":"4034:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1720,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:10"},"returnParameters":{"id":1725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1724,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:10","nodeType":"VariableDeclaration","scope":1726,"src":"4071:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1723,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:10"},"scope":2078,"src":"3999:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1727,"nodeType":"StructuredDocumentation","src":"4323:1604:10","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":1750,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:10","nodeType":"FunctionDefinition","parameters":{"id":1748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1729,"mutability":"mutable","name":"pool","nameLocation":"5971:4:10","nodeType":"VariableDeclaration","scope":1750,"src":"5963:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1728,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1733,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:10","nodeType":"VariableDeclaration","scope":1750,"src":"5985:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1731,"nodeType":"UserDefinedTypeName","pathNode":{"id":1730,"name":"TokenConfig","nameLocations":["5985:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2346,"src":"5985:11:10"},"referencedDeclaration":2346,"src":"5985:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2346_storage_ptr","typeString":"struct TokenConfig"}},"id":1732,"nodeType":"ArrayTypeName","src":"5985:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2346_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1735,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:10","nodeType":"VariableDeclaration","scope":1750,"src":"6027:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1734,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1737,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:10","nodeType":"VariableDeclaration","scope":1750,"src":"6062:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1736,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1739,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:10","nodeType":"VariableDeclaration","scope":1750,"src":"6097:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1738,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1742,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:10","nodeType":"VariableDeclaration","scope":1750,"src":"6129:38:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1741,"nodeType":"UserDefinedTypeName","pathNode":{"id":1740,"name":"PoolRoleAccounts","nameLocations":["6129:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2329,"src":"6129:16:10"},"referencedDeclaration":2329,"src":"6129:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1744,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:10","nodeType":"VariableDeclaration","scope":1750,"src":"6177:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1743,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1747,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:10","nodeType":"VariableDeclaration","scope":1750,"src":"6212:48:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1746,"nodeType":"UserDefinedTypeName","pathNode":{"id":1745,"name":"LiquidityManagement","nameLocations":["6212:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"6212:19:10"},"referencedDeclaration":2232,"src":"6212:19:10","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:10"},"returnParameters":{"id":1749,"nodeType":"ParameterList","parameters":[],"src":"6275:0:10"},"scope":2078,"src":"5932:344:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1751,"nodeType":"StructuredDocumentation","src":"6282:185:10","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":1758,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:10","nodeType":"FunctionDefinition","parameters":{"id":1754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1753,"mutability":"mutable","name":"pool","nameLocation":"6506:4:10","nodeType":"VariableDeclaration","scope":1758,"src":"6498:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1752,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:10"},"returnParameters":{"id":1757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1756,"mutability":"mutable","name":"registered","nameLocation":"6540:10:10","nodeType":"VariableDeclaration","scope":1758,"src":"6535:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1755,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:10"},"scope":2078,"src":"6472:80:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1759,"nodeType":"StructuredDocumentation","src":"6558:589:10","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":1779,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:10","nodeType":"FunctionDefinition","parameters":{"id":1775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1761,"mutability":"mutable","name":"pool","nameLocation":"7189:4:10","nodeType":"VariableDeclaration","scope":1779,"src":"7181:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1760,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1763,"mutability":"mutable","name":"to","nameLocation":"7211:2:10","nodeType":"VariableDeclaration","scope":1779,"src":"7203:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1762,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1767,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:10","nodeType":"VariableDeclaration","scope":1779,"src":"7223:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1765,"nodeType":"UserDefinedTypeName","pathNode":{"id":1764,"name":"IERC20","nameLocations":["7223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"7223:6:10"},"referencedDeclaration":3290,"src":"7223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":1766,"nodeType":"ArrayTypeName","src":"7223:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1770,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:10","nodeType":"VariableDeclaration","scope":1779,"src":"7255:31:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1768,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1769,"nodeType":"ArrayTypeName","src":"7255:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1772,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:10","nodeType":"VariableDeclaration","scope":1779,"src":"7296:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1771,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1774,"mutability":"mutable","name":"userData","nameLocation":"7342:8:10","nodeType":"VariableDeclaration","scope":1779,"src":"7329:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1773,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:10"},"returnParameters":{"id":1778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1777,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:10","nodeType":"VariableDeclaration","scope":1779,"src":"7375:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:10"},"scope":2078,"src":"7152:245:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1780,"nodeType":"StructuredDocumentation","src":"7627:258:10","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":1787,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:10","nodeType":"FunctionDefinition","parameters":{"id":1783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"pool","nameLocation":"7925:4:10","nodeType":"VariableDeclaration","scope":1787,"src":"7917:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1781,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:10"},"returnParameters":{"id":1786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1785,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:10","nodeType":"VariableDeclaration","scope":1787,"src":"7954:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1784,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:10"},"scope":2078,"src":"7890:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1788,"nodeType":"StructuredDocumentation","src":"7978:152:10","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":1797,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:10","nodeType":"FunctionDefinition","parameters":{"id":1791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1790,"mutability":"mutable","name":"pool","nameLocation":"8166:4:10","nodeType":"VariableDeclaration","scope":1797,"src":"8158:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1789,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:10"},"returnParameters":{"id":1796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1795,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:10","nodeType":"VariableDeclaration","scope":1797,"src":"8195:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1793,"nodeType":"UserDefinedTypeName","pathNode":{"id":1792,"name":"IERC20","nameLocations":["8195:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"8195:6:10"},"referencedDeclaration":3290,"src":"8195:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":1794,"nodeType":"ArrayTypeName","src":"8195:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:10"},"scope":2078,"src":"8135:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1798,"nodeType":"StructuredDocumentation","src":"8225:512:10","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":1809,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:10","nodeType":"FunctionDefinition","parameters":{"id":1801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1800,"mutability":"mutable","name":"pool","nameLocation":"8786:4:10","nodeType":"VariableDeclaration","scope":1809,"src":"8778:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1799,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:10"},"returnParameters":{"id":1808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1804,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:10","nodeType":"VariableDeclaration","scope":1809,"src":"8820:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1802,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1803,"nodeType":"ArrayTypeName","src":"8820:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1807,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:10","nodeType":"VariableDeclaration","scope":1809,"src":"8860:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1805,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1806,"nodeType":"ArrayTypeName","src":"8860:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:10"},"scope":2078,"src":"8742:147:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1810,"nodeType":"StructuredDocumentation","src":"8895:287:10","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":1818,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:10","nodeType":"FunctionDefinition","parameters":{"id":1813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1812,"mutability":"mutable","name":"pool","nameLocation":"9216:4:10","nodeType":"VariableDeclaration","scope":1818,"src":"9208:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1811,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:10"},"returnParameters":{"id":1817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1816,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:10","nodeType":"VariableDeclaration","scope":1818,"src":"9245:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2381_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1815,"nodeType":"UserDefinedTypeName","pathNode":{"id":1814,"name":"PoolData","nameLocations":["9245:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":2381,"src":"9245:8:10"},"referencedDeclaration":2381,"src":"9245:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2381_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:10"},"scope":2078,"src":"9187:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1819,"nodeType":"StructuredDocumentation","src":"9277:531:10","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":1838,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:10","nodeType":"FunctionDefinition","parameters":{"id":1822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1821,"mutability":"mutable","name":"pool","nameLocation":"9856:4:10","nodeType":"VariableDeclaration","scope":1838,"src":"9848:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1820,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:10"},"returnParameters":{"id":1837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1826,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:10","nodeType":"VariableDeclaration","scope":1838,"src":"9927:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1824,"nodeType":"UserDefinedTypeName","pathNode":{"id":1823,"name":"IERC20","nameLocations":["9927:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"9927:6:10"},"referencedDeclaration":3290,"src":"9927:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":1825,"nodeType":"ArrayTypeName","src":"9927:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1830,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:10","nodeType":"VariableDeclaration","scope":1838,"src":"9963:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2356_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":1828,"nodeType":"UserDefinedTypeName","pathNode":{"id":1827,"name":"TokenInfo","nameLocations":["9963:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"9963:9:10"},"referencedDeclaration":2356,"src":"9963:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2356_storage_ptr","typeString":"struct TokenInfo"}},"id":1829,"nodeType":"ArrayTypeName","src":"9963:11:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2356_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":1833,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:10","nodeType":"VariableDeclaration","scope":1838,"src":"10005:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1831,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1832,"nodeType":"ArrayTypeName","src":"10005:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1836,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:10","nodeType":"VariableDeclaration","scope":1838,"src":"10047:41:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1834,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1835,"nodeType":"ArrayTypeName","src":"10047:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:10"},"scope":2078,"src":"9813:286:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1839,"nodeType":"StructuredDocumentation","src":"10105:312:10","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":1847,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:10","nodeType":"FunctionDefinition","parameters":{"id":1842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1841,"mutability":"mutable","name":"pool","nameLocation":"10462:4:10","nodeType":"VariableDeclaration","scope":1847,"src":"10454:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1840,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:10"},"returnParameters":{"id":1846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1845,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:10","nodeType":"VariableDeclaration","scope":1847,"src":"10491:37:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1843,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1844,"nodeType":"ArrayTypeName","src":"10491:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:10"},"scope":2078,"src":"10422:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1848,"nodeType":"StructuredDocumentation","src":"10536:301:10","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":1856,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:10","nodeType":"FunctionDefinition","parameters":{"id":1851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1850,"mutability":"mutable","name":"pool","nameLocation":"10873:4:10","nodeType":"VariableDeclaration","scope":1856,"src":"10865:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1849,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:10"},"returnParameters":{"id":1855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1854,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:10","nodeType":"VariableDeclaration","scope":1856,"src":"10902:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2257_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":1853,"nodeType":"UserDefinedTypeName","pathNode":{"id":1852,"name":"PoolConfig","nameLocations":["10902:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":2257,"src":"10902:10:10"},"referencedDeclaration":2257,"src":"10902:10:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2257_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:10"},"scope":2078,"src":"10842:90:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1857,"nodeType":"StructuredDocumentation","src":"10938:283:10","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:10","nodeType":"FunctionDefinition","parameters":{"id":1860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1859,"mutability":"mutable","name":"pool","nameLocation":"11258:4:10","nodeType":"VariableDeclaration","scope":1865,"src":"11250:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1858,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:10"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1863,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:10","nodeType":"VariableDeclaration","scope":1865,"src":"11287:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2303_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1862,"nodeType":"UserDefinedTypeName","pathNode":{"id":1861,"name":"HooksConfig","nameLocations":["11287:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2303,"src":"11287:11:10"},"referencedDeclaration":2303,"src":"11287:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2303_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:10"},"scope":2078,"src":"11226:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1866,"nodeType":"StructuredDocumentation","src":"11325:160:10","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":1873,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:10","nodeType":"FunctionDefinition","parameters":{"id":1869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1868,"mutability":"mutable","name":"pool","nameLocation":"11518:4:10","nodeType":"VariableDeclaration","scope":1873,"src":"11510:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:10"},"returnParameters":{"id":1872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1871,"mutability":"mutable","name":"rate","nameLocation":"11555:4:10","nodeType":"VariableDeclaration","scope":1873,"src":"11547:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1870,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:10"},"scope":2078,"src":"11490:71:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1874,"nodeType":"StructuredDocumentation","src":"11792:168:10","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":1881,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:10","nodeType":"FunctionDefinition","parameters":{"id":1877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1876,"mutability":"mutable","name":"token","nameLocation":"11994:5:10","nodeType":"VariableDeclaration","scope":1881,"src":"11986:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1875,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:10"},"returnParameters":{"id":1880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1879,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:10","nodeType":"VariableDeclaration","scope":1881,"src":"12024:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1878,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:10"},"scope":2078,"src":"11965:85:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1882,"nodeType":"StructuredDocumentation","src":"12056:225:10","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":1891,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:10","nodeType":"FunctionDefinition","parameters":{"id":1887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1884,"mutability":"mutable","name":"token","nameLocation":"12313:5:10","nodeType":"VariableDeclaration","scope":1891,"src":"12305:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1883,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1886,"mutability":"mutable","name":"account","nameLocation":"12328:7:10","nodeType":"VariableDeclaration","scope":1891,"src":"12320:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1885,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:10"},"returnParameters":{"id":1890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1889,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:10","nodeType":"VariableDeclaration","scope":1891,"src":"12360:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1888,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:10"},"scope":2078,"src":"12286:96:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1892,"nodeType":"StructuredDocumentation","src":"12388:299:10","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":1903,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:10","nodeType":"FunctionDefinition","parameters":{"id":1899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1894,"mutability":"mutable","name":"token","nameLocation":"12719:5:10","nodeType":"VariableDeclaration","scope":1903,"src":"12711:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1893,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1896,"mutability":"mutable","name":"owner","nameLocation":"12734:5:10","nodeType":"VariableDeclaration","scope":1903,"src":"12726:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1895,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1898,"mutability":"mutable","name":"spender","nameLocation":"12749:7:10","nodeType":"VariableDeclaration","scope":1903,"src":"12741:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1897,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:10"},"returnParameters":{"id":1902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1901,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:10","nodeType":"VariableDeclaration","scope":1903,"src":"12781:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1900,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:10"},"scope":2078,"src":"12692:113:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1904,"nodeType":"StructuredDocumentation","src":"12811:475:10","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":1915,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:10","nodeType":"FunctionDefinition","parameters":{"id":1911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1906,"mutability":"mutable","name":"owner","nameLocation":"13316:5:10","nodeType":"VariableDeclaration","scope":1915,"src":"13308:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1905,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1908,"mutability":"mutable","name":"spender","nameLocation":"13331:7:10","nodeType":"VariableDeclaration","scope":1915,"src":"13323:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1907,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1910,"mutability":"mutable","name":"amount","nameLocation":"13348:6:10","nodeType":"VariableDeclaration","scope":1915,"src":"13340:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1909,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:10"},"returnParameters":{"id":1914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1913,"mutability":"mutable","name":"success","nameLocation":"13379:7:10","nodeType":"VariableDeclaration","scope":1915,"src":"13374:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1912,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:10"},"scope":2078,"src":"13291:97:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1916,"nodeType":"StructuredDocumentation","src":"13615:251:10","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":1923,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:10","nodeType":"FunctionDefinition","parameters":{"id":1919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1918,"mutability":"mutable","name":"pool","nameLocation":"13901:4:10","nodeType":"VariableDeclaration","scope":1923,"src":"13893:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1917,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:10"},"returnParameters":{"id":1922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1921,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:10","nodeType":"VariableDeclaration","scope":1923,"src":"13930:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1920,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:10"},"scope":2078,"src":"13871:76:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1924,"nodeType":"StructuredDocumentation","src":"13953:648:10","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":1937,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:10","nodeType":"FunctionDefinition","parameters":{"id":1927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1926,"mutability":"mutable","name":"pool","nameLocation":"14651:4:10","nodeType":"VariableDeclaration","scope":1937,"src":"14643:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1925,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:10"},"returnParameters":{"id":1936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1929,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:10","nodeType":"VariableDeclaration","scope":1937,"src":"14709:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1928,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1931,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:10","nodeType":"VariableDeclaration","scope":1937,"src":"14726:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1930,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1933,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:10","nodeType":"VariableDeclaration","scope":1937,"src":"14757:30:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1932,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1935,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:10","nodeType":"VariableDeclaration","scope":1937,"src":"14789:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1934,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:10"},"scope":2078,"src":"14606:205:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1938,"nodeType":"StructuredDocumentation","src":"15039:332:10","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":1946,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:10","nodeType":"FunctionDefinition","parameters":{"id":1942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1941,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:10","nodeType":"VariableDeclaration","scope":1946,"src":"15412:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1940,"nodeType":"UserDefinedTypeName","pathNode":{"id":1939,"name":"IERC4626","nameLocations":["15412:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"15412:8:10"},"referencedDeclaration":3212,"src":"15412:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:10"},"returnParameters":{"id":1945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1944,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:10","nodeType":"VariableDeclaration","scope":1946,"src":"15458:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1943,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:10"},"scope":2078,"src":"15376:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1947,"nodeType":"StructuredDocumentation","src":"15490:477:10","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":1955,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:10","nodeType":"FunctionDefinition","parameters":{"id":1951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1950,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:10","nodeType":"VariableDeclaration","scope":1955,"src":"16003:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":1949,"nodeType":"UserDefinedTypeName","pathNode":{"id":1948,"name":"IERC4626","nameLocations":["16003:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"16003:8:10"},"referencedDeclaration":3212,"src":"16003:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:10"},"returnParameters":{"id":1954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1953,"mutability":"mutable","name":"asset","nameLocation":"16057:5:10","nodeType":"VariableDeclaration","scope":1955,"src":"16049:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1952,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:10"},"scope":2078,"src":"15972:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1956,"nodeType":"StructuredDocumentation","src":"16288:379:10","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":1966,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:10","nodeType":"FunctionDefinition","parameters":{"id":1962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1958,"mutability":"mutable","name":"pool","nameLocation":"16715:4:10","nodeType":"VariableDeclaration","scope":1966,"src":"16707:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1957,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1961,"mutability":"mutable","name":"token","nameLocation":"16728:5:10","nodeType":"VariableDeclaration","scope":1966,"src":"16721:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1960,"nodeType":"UserDefinedTypeName","pathNode":{"id":1959,"name":"IERC20","nameLocations":["16721:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"16721:6:10"},"referencedDeclaration":3290,"src":"16721:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:10"},"returnParameters":{"id":1965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1964,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:10","nodeType":"VariableDeclaration","scope":1966,"src":"16758:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1963,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:10"},"scope":2078,"src":"16672:109:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1967,"nodeType":"StructuredDocumentation","src":"16787:381:10","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":1977,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:10","nodeType":"FunctionDefinition","parameters":{"id":1973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1969,"mutability":"mutable","name":"pool","nameLocation":"17217:4:10","nodeType":"VariableDeclaration","scope":1977,"src":"17209:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1968,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1972,"mutability":"mutable","name":"token","nameLocation":"17230:5:10","nodeType":"VariableDeclaration","scope":1977,"src":"17223:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":1971,"nodeType":"UserDefinedTypeName","pathNode":{"id":1970,"name":"IERC20","nameLocations":["17223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"17223:6:10"},"referencedDeclaration":3290,"src":"17223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:10"},"returnParameters":{"id":1976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1975,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:10","nodeType":"VariableDeclaration","scope":1977,"src":"17260:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1974,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:10"},"scope":2078,"src":"17173:111:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1978,"nodeType":"StructuredDocumentation","src":"17290:271:10","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":1985,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:10","nodeType":"FunctionDefinition","parameters":{"id":1981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1980,"mutability":"mutable","name":"pool","nameLocation":"17610:4:10","nodeType":"VariableDeclaration","scope":1985,"src":"17602:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1979,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:10"},"returnParameters":{"id":1984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1983,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:10","nodeType":"VariableDeclaration","scope":1985,"src":"17639:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1982,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:10"},"scope":2078,"src":"17566:100:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1986,"nodeType":"StructuredDocumentation","src":"17672:286:10","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":1994,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:10","nodeType":"FunctionDefinition","parameters":{"id":1989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1988,"mutability":"mutable","name":"pool","nameLocation":"18000:4:10","nodeType":"VariableDeclaration","scope":1994,"src":"17992:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1987,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:10"},"returnParameters":{"id":1993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1992,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:10","nodeType":"VariableDeclaration","scope":1994,"src":"18029:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1991,"nodeType":"UserDefinedTypeName","pathNode":{"id":1990,"name":"PoolRoleAccounts","nameLocations":["18029:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2329,"src":"18029:16:10"},"referencedDeclaration":2329,"src":"18029:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2329_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:10"},"scope":2078,"src":"17963:104:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1995,"nodeType":"StructuredDocumentation","src":"18073:363:10","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":2005,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:10","nodeType":"FunctionDefinition","parameters":{"id":2001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1997,"mutability":"mutable","name":"pool","nameLocation":"18499:4:10","nodeType":"VariableDeclaration","scope":2005,"src":"18491:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1996,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2000,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:10","nodeType":"VariableDeclaration","scope":2005,"src":"18513:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1999,"nodeType":"UserDefinedTypeName","pathNode":{"id":1998,"name":"PoolSwapParams","nameLocations":["18513:14:10"],"nodeType":"IdentifierPath","referencedDeclaration":2424,"src":"18513:14:10"},"referencedDeclaration":2424,"src":"18513:14:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2424_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:10"},"returnParameters":{"id":2004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2003,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:10","nodeType":"VariableDeclaration","scope":2005,"src":"18575:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2002,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:10"},"scope":2078,"src":"18441:168:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2006,"nodeType":"StructuredDocumentation","src":"18615:145:10","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":2012,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:10","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[],"src":"18798:2:10"},"returnParameters":{"id":2011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2010,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:10","nodeType":"VariableDeclaration","scope":2012,"src":"18824:44:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"},"typeName":{"id":2009,"nodeType":"UserDefinedTypeName","pathNode":{"id":2008,"name":"IProtocolFeeController","nameLocations":["18824:22:10"],"nodeType":"IdentifierPath","referencedDeclaration":725,"src":"18824:22:10"},"referencedDeclaration":725,"src":"18824:22:10","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$725","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:10"},"scope":2078,"src":"18765:105:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2013,"nodeType":"StructuredDocumentation","src":"19098:296:10","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":2020,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:10","nodeType":"FunctionDefinition","parameters":{"id":2016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2015,"mutability":"mutable","name":"pool","nameLocation":"19437:4:10","nodeType":"VariableDeclaration","scope":2020,"src":"19429:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2014,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:10"},"returnParameters":{"id":2019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2018,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:10","nodeType":"VariableDeclaration","scope":2020,"src":"19466:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2017,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:10"},"scope":2078,"src":"19399:88:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2021,"nodeType":"StructuredDocumentation","src":"19493:679:10","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":2036,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:10","nodeType":"FunctionDefinition","parameters":{"id":2031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2023,"mutability":"mutable","name":"pool","nameLocation":"20227:4:10","nodeType":"VariableDeclaration","scope":2036,"src":"20219:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2022,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2025,"mutability":"mutable","name":"from","nameLocation":"20249:4:10","nodeType":"VariableDeclaration","scope":2036,"src":"20241:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2024,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2027,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:10","nodeType":"VariableDeclaration","scope":2036,"src":"20263:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2026,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2030,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:10","nodeType":"VariableDeclaration","scope":2036,"src":"20297:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2028,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2029,"nodeType":"ArrayTypeName","src":"20297:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:10"},"returnParameters":{"id":2035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2034,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:10","nodeType":"VariableDeclaration","scope":2036,"src":"20352:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2032,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2033,"nodeType":"ArrayTypeName","src":"20352:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:10"},"scope":2078,"src":"20177:204:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2037,"nodeType":"StructuredDocumentation","src":"20602:699:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":2044,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:10","nodeType":"FunctionDefinition","parameters":{"id":2040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2039,"mutability":"mutable","name":"data","nameLocation":"21336:4:10","nodeType":"VariableDeclaration","scope":2044,"src":"21321:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2038,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:10"},"returnParameters":{"id":2043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2042,"mutability":"mutable","name":"result","nameLocation":"21373:6:10","nodeType":"VariableDeclaration","scope":2044,"src":"21360:19:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2041,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:10"},"scope":2078,"src":"21306:75:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2045,"nodeType":"StructuredDocumentation","src":"21387:731:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":2050,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:10","nodeType":"FunctionDefinition","parameters":{"id":2048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2047,"mutability":"mutable","name":"data","nameLocation":"22162:4:10","nodeType":"VariableDeclaration","scope":2050,"src":"22147:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2046,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:10"},"returnParameters":{"id":2049,"nodeType":"ParameterList","parameters":[],"src":"22176:0:10"},"scope":2078,"src":"22123:54:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2051,"nodeType":"StructuredDocumentation","src":"22183:239:10","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":2056,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:10","nodeType":"FunctionDefinition","parameters":{"id":2052,"nodeType":"ParameterList","parameters":[],"src":"22451:2:10"},"returnParameters":{"id":2055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2054,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:10","nodeType":"VariableDeclaration","scope":2056,"src":"22477:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2053,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:10"},"scope":2078,"src":"22427:70:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2057,"nodeType":"StructuredDocumentation","src":"22503:302:10","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":2062,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:10","nodeType":"FunctionDefinition","parameters":{"id":2058,"nodeType":"ParameterList","parameters":[],"src":"22845:2:10"},"returnParameters":{"id":2061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2060,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:10","nodeType":"VariableDeclaration","scope":2062,"src":"22871:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2059,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:10"},"scope":2078,"src":"22810:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2063,"nodeType":"StructuredDocumentation","src":"22908:162:10","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":2070,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:10","nodeType":"FunctionDefinition","parameters":{"id":2068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2065,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:10","nodeType":"VariableDeclaration","scope":2070,"src":"23103:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2064,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2067,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:10","nodeType":"VariableDeclaration","scope":2070,"src":"23121:24:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2066,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:10"},"returnParameters":{"id":2069,"nodeType":"ParameterList","parameters":[],"src":"23155:0:10"},"scope":2078,"src":"23075:81:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2071,"nodeType":"StructuredDocumentation","src":"23380:284:10","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":2077,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:10","nodeType":"FunctionDefinition","parameters":{"id":2072,"nodeType":"ParameterList","parameters":[],"src":"23691:2:10"},"returnParameters":{"id":2076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2075,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:10","nodeType":"VariableDeclaration","scope":2077,"src":"23717:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"},"typeName":{"id":2074,"nodeType":"UserDefinedTypeName","pathNode":{"id":2073,"name":"IAuthorizer","nameLocations":["23717:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"23717:11:10"},"referencedDeclaration":218,"src":"23717:11:10","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:10"},"scope":2078,"src":"23669:72:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2079,"src":"767:22976:10","usedErrors":[],"usedEvents":[]}],"src":"46:23698:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AddLiquidityParams":[2475],"AfterSwapParams":[2453],"BufferWrapOrUnwrapParams":[2514],"FEE_BITLENGTH":[2517],"FEE_SCALING_FACTOR":[2520],"HookFlags":[2279],"HooksConfig":[2303],"IERC20":[3290],"IERC4626":[3212],"IRateProvider":[24],"IVaultMain":[2214],"LiquidityManagement":[2232],"MAX_FEE_PERCENTAGE":[2523],"PoolConfig":[2257],"PoolConfigBits":[2234],"PoolData":[2381],"PoolRoleAccounts":[2329],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"RemoveLiquidityParams":[2496],"Rounding":[2384],"SwapKind":[2387],"SwapState":[2313],"TokenConfig":[2346],"TokenInfo":[2356],"TokenType":[2333],"VaultState":[2321],"VaultSwapParams":[2406],"WrappingDirection":[2499]},"id":2215,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2080,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2082,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2215,"sourceUnit":3291,"src":"72:72:11","symbolAliases":[{"foreign":{"id":2081,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2083,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2215,"sourceUnit":2524,"src":"146:26:11","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":2084,"nodeType":"StructuredDocumentation","src":"174:232:11","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":2214,"linearizedBaseContracts":[2214],"name":"IVaultMain","nameLocation":"417:10:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2085,"nodeType":"StructuredDocumentation","src":"656:431:11","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":2092,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:11","nodeType":"FunctionDefinition","parameters":{"id":2088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2087,"mutability":"mutable","name":"data","nameLocation":"1123:4:11","nodeType":"VariableDeclaration","scope":2092,"src":"1108:19:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2086,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:11"},"returnParameters":{"id":2091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2090,"mutability":"mutable","name":"result","nameLocation":"1160:6:11","nodeType":"VariableDeclaration","scope":2092,"src":"1147:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2089,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:11"},"scope":2214,"src":"1092:76:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2093,"nodeType":"StructuredDocumentation","src":"1174:1291:11","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":2103,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:11","nodeType":"FunctionDefinition","parameters":{"id":2099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2096,"mutability":"mutable","name":"token","nameLocation":"2493:5:11","nodeType":"VariableDeclaration","scope":2103,"src":"2486:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2095,"nodeType":"UserDefinedTypeName","pathNode":{"id":2094,"name":"IERC20","nameLocations":["2486:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2486:6:11"},"referencedDeclaration":3290,"src":"2486:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2098,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:11","nodeType":"VariableDeclaration","scope":2103,"src":"2500:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:11"},"returnParameters":{"id":2102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2101,"mutability":"mutable","name":"credit","nameLocation":"2546:6:11","nodeType":"VariableDeclaration","scope":2103,"src":"2538:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2100,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:11"},"scope":2214,"src":"2470:84:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2104,"nodeType":"StructuredDocumentation","src":"2560:315:11","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":2114,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:11","nodeType":"FunctionDefinition","parameters":{"id":2112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2107,"mutability":"mutable","name":"token","nameLocation":"2903:5:11","nodeType":"VariableDeclaration","scope":2114,"src":"2896:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2106,"nodeType":"UserDefinedTypeName","pathNode":{"id":2105,"name":"IERC20","nameLocations":["2896:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"2896:6:11"},"referencedDeclaration":3290,"src":"2896:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2109,"mutability":"mutable","name":"to","nameLocation":"2918:2:11","nodeType":"VariableDeclaration","scope":2114,"src":"2910:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2108,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2111,"mutability":"mutable","name":"amount","nameLocation":"2930:6:11","nodeType":"VariableDeclaration","scope":2114,"src":"2922:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2110,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:11"},"returnParameters":{"id":2113,"nodeType":"ParameterList","parameters":[],"src":"2946:0:11"},"scope":2214,"src":"2880:67:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2115,"nodeType":"StructuredDocumentation","src":"3161:412:11","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":2127,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:11","nodeType":"FunctionDefinition","parameters":{"id":2119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2118,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:11","nodeType":"VariableDeclaration","scope":2127,"src":"3601:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2406_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":2117,"nodeType":"UserDefinedTypeName","pathNode":{"id":2116,"name":"VaultSwapParams","nameLocations":["3601:15:11"],"nodeType":"IdentifierPath","referencedDeclaration":2406,"src":"3601:15:11"},"referencedDeclaration":2406,"src":"3601:15:11","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2406_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:11"},"returnParameters":{"id":2126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2121,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:11","nodeType":"VariableDeclaration","scope":2127,"src":"3664:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2120,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2123,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:11","nodeType":"VariableDeclaration","scope":2127,"src":"3693:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2122,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2125,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:11","nodeType":"VariableDeclaration","scope":2127,"src":"3714:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2124,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:11"},"scope":2214,"src":"3578:158:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2128,"nodeType":"StructuredDocumentation","src":"3954:523:11","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":2141,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:11","nodeType":"FunctionDefinition","parameters":{"id":2132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2131,"mutability":"mutable","name":"params","nameLocation":"4539:6:11","nodeType":"VariableDeclaration","scope":2141,"src":"4513:32:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2475_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":2130,"nodeType":"UserDefinedTypeName","pathNode":{"id":2129,"name":"AddLiquidityParams","nameLocations":["4513:18:11"],"nodeType":"IdentifierPath","referencedDeclaration":2475,"src":"4513:18:11"},"referencedDeclaration":2475,"src":"4513:18:11","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2475_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:11"},"returnParameters":{"id":2140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2135,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:11","nodeType":"VariableDeclaration","scope":2141,"src":"4570:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2133,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2134,"nodeType":"ArrayTypeName","src":"4570:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2137,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:11","nodeType":"VariableDeclaration","scope":2141,"src":"4598:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2136,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2139,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:11","nodeType":"VariableDeclaration","scope":2141,"src":"4620:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2138,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:11"},"scope":2214,"src":"4482:163:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2142,"nodeType":"StructuredDocumentation","src":"4864:644:11","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":2155,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:11","nodeType":"FunctionDefinition","parameters":{"id":2146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2145,"mutability":"mutable","name":"params","nameLocation":"5576:6:11","nodeType":"VariableDeclaration","scope":2155,"src":"5547:35:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2496_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":2144,"nodeType":"UserDefinedTypeName","pathNode":{"id":2143,"name":"RemoveLiquidityParams","nameLocations":["5547:21:11"],"nodeType":"IdentifierPath","referencedDeclaration":2496,"src":"5547:21:11"},"referencedDeclaration":2496,"src":"5547:21:11","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2496_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:11"},"returnParameters":{"id":2154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2148,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:11","nodeType":"VariableDeclaration","scope":2155,"src":"5607:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2147,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2151,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:11","nodeType":"VariableDeclaration","scope":2155,"src":"5628:27:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2149,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2150,"nodeType":"ArrayTypeName","src":"5628:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2153,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:11","nodeType":"VariableDeclaration","scope":2155,"src":"5657:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2152,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:11"},"scope":2214,"src":"5513:169:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2156,"nodeType":"StructuredDocumentation","src":"5912:385:11","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":2168,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:11","nodeType":"FunctionDefinition","parameters":{"id":2162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2158,"mutability":"mutable","name":"pool","nameLocation":"6361:4:11","nodeType":"VariableDeclaration","scope":2168,"src":"6353:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2157,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2161,"mutability":"mutable","name":"token","nameLocation":"6382:5:11","nodeType":"VariableDeclaration","scope":2168,"src":"6375:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2160,"nodeType":"UserDefinedTypeName","pathNode":{"id":2159,"name":"IERC20","nameLocations":["6375:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"6375:6:11"},"referencedDeclaration":3290,"src":"6375:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:11"},"returnParameters":{"id":2167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2164,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:11","nodeType":"VariableDeclaration","scope":2168,"src":"6417:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2163,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2166,"mutability":"mutable","name":"index","nameLocation":"6445:5:11","nodeType":"VariableDeclaration","scope":2168,"src":"6437:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2165,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:11"},"scope":2214,"src":"6302:150:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2169,"nodeType":"StructuredDocumentation","src":"6683:460:11","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":2180,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:11","nodeType":"FunctionDefinition","parameters":{"id":2176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2171,"mutability":"mutable","name":"owner","nameLocation":"7174:5:11","nodeType":"VariableDeclaration","scope":2180,"src":"7166:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2170,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2173,"mutability":"mutable","name":"to","nameLocation":"7189:2:11","nodeType":"VariableDeclaration","scope":2180,"src":"7181:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2172,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2175,"mutability":"mutable","name":"amount","nameLocation":"7201:6:11","nodeType":"VariableDeclaration","scope":2180,"src":"7193:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2174,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:11"},"returnParameters":{"id":2179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2178,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2180,"src":"7227:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2177,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:11"},"scope":2214,"src":"7148:85:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2181,"nodeType":"StructuredDocumentation","src":"7239:544:11","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":2194,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:11","nodeType":"FunctionDefinition","parameters":{"id":2190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2183,"mutability":"mutable","name":"spender","nameLocation":"7818:7:11","nodeType":"VariableDeclaration","scope":2194,"src":"7810:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2182,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2185,"mutability":"mutable","name":"from","nameLocation":"7835:4:11","nodeType":"VariableDeclaration","scope":2194,"src":"7827:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2184,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2187,"mutability":"mutable","name":"to","nameLocation":"7849:2:11","nodeType":"VariableDeclaration","scope":2194,"src":"7841:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2186,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2189,"mutability":"mutable","name":"amount","nameLocation":"7861:6:11","nodeType":"VariableDeclaration","scope":2194,"src":"7853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2188,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:11"},"returnParameters":{"id":2193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2192,"mutability":"mutable","name":"success","nameLocation":"7892:7:11","nodeType":"VariableDeclaration","scope":2194,"src":"7887:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2191,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:11"},"scope":2214,"src":"7788:113:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2195,"nodeType":"StructuredDocumentation","src":"8128:575:11","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":2207,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:11","nodeType":"FunctionDefinition","parameters":{"id":2199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2198,"mutability":"mutable","name":"params","nameLocation":"8784:6:11","nodeType":"VariableDeclaration","scope":2207,"src":"8752:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2514_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":2197,"nodeType":"UserDefinedTypeName","pathNode":{"id":2196,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:11"],"nodeType":"IdentifierPath","referencedDeclaration":2514,"src":"8752:24:11"},"referencedDeclaration":2514,"src":"8752:24:11","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2514_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:11"},"returnParameters":{"id":2206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:11","nodeType":"VariableDeclaration","scope":2207,"src":"8815:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2200,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2203,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:11","nodeType":"VariableDeclaration","scope":2207,"src":"8844:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2202,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2205,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:11","nodeType":"VariableDeclaration","scope":2207,"src":"8865:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2204,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:11"},"scope":2214,"src":"8708:179:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2208,"nodeType":"StructuredDocumentation","src":"9115:345:11","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":2213,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:11","nodeType":"FunctionDefinition","parameters":{"id":2209,"nodeType":"ParameterList","parameters":[],"src":"9491:2:11"},"returnParameters":{"id":2212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2211,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:11","nodeType":"VariableDeclaration","scope":2213,"src":"9517:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2210,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:11"},"scope":2214,"src":"9465:76:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2215,"src":"407:9136:11","usedErrors":[],"usedEvents":[]}],"src":"46:9498:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[2459],"AddLiquidityParams":[2475],"AfterSwapParams":[2453],"BufferWrapOrUnwrapParams":[2514],"FEE_BITLENGTH":[2517],"FEE_SCALING_FACTOR":[2520],"HookFlags":[2279],"HooksConfig":[2303],"IERC20":[3290],"IERC4626":[3212],"IRateProvider":[24],"LiquidityManagement":[2232],"MAX_FEE_PERCENTAGE":[2523],"PoolConfig":[2257],"PoolConfigBits":[2234],"PoolData":[2381],"PoolRoleAccounts":[2329],"PoolSwapParams":[2424],"RemoveLiquidityKind":[2480],"RemoveLiquidityParams":[2496],"Rounding":[2384],"SwapKind":[2387],"SwapState":[2313],"TokenConfig":[2346],"TokenInfo":[2356],"TokenType":[2333],"VaultState":[2321],"VaultSwapParams":[2406],"WrappingDirection":[2499]},"id":2524,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2216,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2218,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2524,"sourceUnit":3291,"src":"72:72:12","symbolAliases":[{"foreign":{"id":2217,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2220,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2524,"sourceUnit":3213,"src":"145:75:12","symbolAliases":[{"foreign":{"id":2219,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3212,"src":"154:8:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":2222,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2524,"sourceUnit":25,"src":"222:76:12","symbolAliases":[{"foreign":{"id":2221,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24,"src":"231:13:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":2223,"nodeType":"StructuredDocumentation","src":"300:472:12","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":2232,"members":[{"constant":false,"id":2225,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:12","nodeType":"VariableDeclaration","scope":2232,"src":"806:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2224,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2227,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:12","nodeType":"VariableDeclaration","scope":2232,"src":"843:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2226,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2229,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:12","nodeType":"VariableDeclaration","scope":2232,"src":"878:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2228,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2231,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:12","nodeType":"VariableDeclaration","scope":2232,"src":"916:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2230,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:12","nodeType":"StructDefinition","scope":2524,"src":"773:165:12","visibility":"public"},{"canonicalName":"PoolConfigBits","id":2234,"name":"PoolConfigBits","nameLocation":"1015:14:12","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:12","underlyingType":{"id":2233,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":2235,"nodeType":"StructuredDocumentation","src":"1043:1034:12","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":2257,"members":[{"constant":false,"id":2238,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:12","nodeType":"VariableDeclaration","scope":2257,"src":"2102:39:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2237,"nodeType":"UserDefinedTypeName","pathNode":{"id":2236,"name":"LiquidityManagement","nameLocations":["2102:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2232,"src":"2102:19:12"},"referencedDeclaration":2232,"src":"2102:19:12","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2232_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":2240,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:12","nodeType":"VariableDeclaration","scope":2257,"src":"2147:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2239,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2242,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:12","nodeType":"VariableDeclaration","scope":2257,"src":"2184:34:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2241,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2244,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:12","nodeType":"VariableDeclaration","scope":2257,"src":"2224:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2243,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2246,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:12","nodeType":"VariableDeclaration","scope":2257,"src":"2265:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":2245,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:12","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":2248,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:12","nodeType":"VariableDeclaration","scope":2257,"src":"2295:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2247,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2250,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:12","nodeType":"VariableDeclaration","scope":2257,"src":"2326:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2249,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2252,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:12","nodeType":"VariableDeclaration","scope":2257,"src":"2353:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2251,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2254,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:12","nodeType":"VariableDeclaration","scope":2257,"src":"2381:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2253,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2256,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:12","nodeType":"VariableDeclaration","scope":2257,"src":"2404:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2255,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:12","nodeType":"StructDefinition","scope":2524,"src":"2078:354:12","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":2258,"nodeType":"StructuredDocumentation","src":"2434:352:12","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":2279,"members":[{"constant":false,"id":2260,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:12","nodeType":"VariableDeclaration","scope":2279,"src":"2810:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2259,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:12","nodeType":"VariableDeclaration","scope":2279,"src":"2846:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2261,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2264,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:12","nodeType":"VariableDeclaration","scope":2279,"src":"2883:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2263,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2266,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:12","nodeType":"VariableDeclaration","scope":2279,"src":"2919:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2265,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2268,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:12","nodeType":"VariableDeclaration","scope":2279,"src":"2961:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2267,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2270,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:12","nodeType":"VariableDeclaration","scope":2279,"src":"2992:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2269,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2272,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:12","nodeType":"VariableDeclaration","scope":2279,"src":"3022:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2271,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2274,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:12","nodeType":"VariableDeclaration","scope":2279,"src":"3061:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2273,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2276,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:12","nodeType":"VariableDeclaration","scope":2279,"src":"3099:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2275,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2278,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:12","nodeType":"VariableDeclaration","scope":2279,"src":"3141:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2277,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:12","nodeType":"StructDefinition","scope":2524,"src":"2787:392:12","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":2280,"nodeType":"StructuredDocumentation","src":"3181:101:12","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":2303,"members":[{"constant":false,"id":2282,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:12","nodeType":"VariableDeclaration","scope":2303,"src":"3307:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2281,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2284,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:12","nodeType":"VariableDeclaration","scope":2303,"src":"3343:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2283,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2286,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:12","nodeType":"VariableDeclaration","scope":2303,"src":"3380:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2285,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2288,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:12","nodeType":"VariableDeclaration","scope":2303,"src":"3416:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2287,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2290,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:12","nodeType":"VariableDeclaration","scope":2303,"src":"3458:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2289,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2292,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:12","nodeType":"VariableDeclaration","scope":2303,"src":"3489:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2291,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2294,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:12","nodeType":"VariableDeclaration","scope":2303,"src":"3519:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2293,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2296,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:12","nodeType":"VariableDeclaration","scope":2303,"src":"3558:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2295,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2298,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:12","nodeType":"VariableDeclaration","scope":2303,"src":"3596:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2297,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2300,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:12","nodeType":"VariableDeclaration","scope":2303,"src":"3638:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2299,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2302,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:12","nodeType":"VariableDeclaration","scope":2303,"src":"3679:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2301,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:12","nodeType":"StructDefinition","scope":2524,"src":"3282:421:12","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":2304,"nodeType":"StructuredDocumentation","src":"3705:364:12","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":2313,"members":[{"constant":false,"id":2306,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:12","nodeType":"VariableDeclaration","scope":2313,"src":"4093:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2305,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2308,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:12","nodeType":"VariableDeclaration","scope":2313,"src":"4114:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2307,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2310,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:12","nodeType":"VariableDeclaration","scope":2313,"src":"4136:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2309,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2312,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:12","nodeType":"VariableDeclaration","scope":2313,"src":"4169:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2311,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:12","nodeType":"StructDefinition","scope":2524,"src":"4070:127:12","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":2314,"nodeType":"StructuredDocumentation","src":"4199:381:12","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":2321,"members":[{"constant":false,"id":2316,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:12","nodeType":"VariableDeclaration","scope":2321,"src":"4605:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2315,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2318,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:12","nodeType":"VariableDeclaration","scope":2321,"src":"4631:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2317,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2320,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:12","nodeType":"VariableDeclaration","scope":2321,"src":"4655:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2319,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:12","nodeType":"StructDefinition","scope":2524,"src":"4581:98:12","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":2322,"nodeType":"StructuredDocumentation","src":"4681:461:12","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":2329,"members":[{"constant":false,"id":2324,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:12","nodeType":"VariableDeclaration","scope":2329,"src":"5173:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2323,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2326,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:12","nodeType":"VariableDeclaration","scope":2329,"src":"5199:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2325,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2328,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:12","nodeType":"VariableDeclaration","scope":2329,"src":"5227:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2327,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:12","nodeType":"StructDefinition","scope":2524,"src":"5143:106:12","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":2330,"nodeType":"StructuredDocumentation","src":"9245:1024:12","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":2333,"members":[{"id":2331,"name":"STANDARD","nameLocation":"10291:8:12","nodeType":"EnumValue","src":"10291:8:12"},{"id":2332,"name":"WITH_RATE","nameLocation":"10305:9:12","nodeType":"EnumValue","src":"10305:9:12"}],"name":"TokenType","nameLocation":"10275:9:12","nodeType":"EnumDefinition","src":"10270:46:12"},{"canonicalName":"TokenConfig","documentation":{"id":2334,"nodeType":"StructuredDocumentation","src":"10318:915:12","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2346,"members":[{"constant":false,"id":2337,"mutability":"mutable","name":"token","nameLocation":"11266:5:12","nodeType":"VariableDeclaration","scope":2346,"src":"11259:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2336,"nodeType":"UserDefinedTypeName","pathNode":{"id":2335,"name":"IERC20","nameLocations":["11259:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"11259:6:12"},"referencedDeclaration":3290,"src":"11259:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:12","nodeType":"VariableDeclaration","scope":2346,"src":"11277:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2333","typeString":"enum TokenType"},"typeName":{"id":2339,"nodeType":"UserDefinedTypeName","pathNode":{"id":2338,"name":"TokenType","nameLocations":["11277:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2333,"src":"11277:9:12"},"referencedDeclaration":2333,"src":"11277:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2333","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2343,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:12","nodeType":"VariableDeclaration","scope":2346,"src":"11302:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":2342,"nodeType":"UserDefinedTypeName","pathNode":{"id":2341,"name":"IRateProvider","nameLocations":["11302:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11302:13:12"},"referencedDeclaration":24,"src":"11302:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2345,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:12","nodeType":"VariableDeclaration","scope":2346,"src":"11334:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2344,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:12","nodeType":"StructDefinition","scope":2524,"src":"11234:121:12","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":2347,"nodeType":"StructuredDocumentation","src":"11357:592:12","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2356,"members":[{"constant":false,"id":2350,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:12","nodeType":"VariableDeclaration","scope":2356,"src":"11973:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2333","typeString":"enum TokenType"},"typeName":{"id":2349,"nodeType":"UserDefinedTypeName","pathNode":{"id":2348,"name":"TokenType","nameLocations":["11973:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2333,"src":"11973:9:12"},"referencedDeclaration":2333,"src":"11973:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2333","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2353,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:12","nodeType":"VariableDeclaration","scope":2356,"src":"11998:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"},"typeName":{"id":2352,"nodeType":"UserDefinedTypeName","pathNode":{"id":2351,"name":"IRateProvider","nameLocations":["11998:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":24,"src":"11998:13:12"},"referencedDeclaration":24,"src":"11998:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$24","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:12","nodeType":"VariableDeclaration","scope":2356,"src":"12030:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2354,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:12","nodeType":"StructDefinition","scope":2524,"src":"11950:101:12","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":2357,"nodeType":"StructuredDocumentation","src":"12053:761:12","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":2381,"members":[{"constant":false,"id":2360,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:12","nodeType":"VariableDeclaration","scope":2381,"src":"12837:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2234","typeString":"PoolConfigBits"},"typeName":{"id":2359,"nodeType":"UserDefinedTypeName","pathNode":{"id":2358,"name":"PoolConfigBits","nameLocations":["12837:14:12"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"12837:14:12"},"referencedDeclaration":2234,"src":"12837:14:12","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2234","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":2364,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:12","nodeType":"VariableDeclaration","scope":2381,"src":"12872:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2362,"nodeType":"UserDefinedTypeName","pathNode":{"id":2361,"name":"IERC20","nameLocations":["12872:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"12872:6:12"},"referencedDeclaration":3290,"src":"12872:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2363,"nodeType":"ArrayTypeName","src":"12872:8:12","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2368,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:12","nodeType":"VariableDeclaration","scope":2381,"src":"12893:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2356_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":2366,"nodeType":"UserDefinedTypeName","pathNode":{"id":2365,"name":"TokenInfo","nameLocations":["12893:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2356,"src":"12893:9:12"},"referencedDeclaration":2356,"src":"12893:9:12","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2356_storage_ptr","typeString":"struct TokenInfo"}},"id":2367,"nodeType":"ArrayTypeName","src":"12893:11:12","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2356_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":2371,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:12","nodeType":"VariableDeclaration","scope":2381,"src":"12920:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2369,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2370,"nodeType":"ArrayTypeName","src":"12920:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:12","nodeType":"VariableDeclaration","scope":2381,"src":"12947:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2372,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2373,"nodeType":"ArrayTypeName","src":"12947:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2377,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:12","nodeType":"VariableDeclaration","scope":2381,"src":"12983:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2375,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2376,"nodeType":"ArrayTypeName","src":"12983:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2380,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:12","nodeType":"VariableDeclaration","scope":2381,"src":"13009:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2378,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2379,"nodeType":"ArrayTypeName","src":"13009:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:12","nodeType":"StructDefinition","scope":2524,"src":"12815:228:12","visibility":"public"},{"canonicalName":"Rounding","id":2384,"members":[{"id":2382,"name":"ROUND_UP","nameLocation":"13065:8:12","nodeType":"EnumValue","src":"13065:8:12"},{"id":2383,"name":"ROUND_DOWN","nameLocation":"13079:10:12","nodeType":"EnumValue","src":"13079:10:12"}],"name":"Rounding","nameLocation":"13050:8:12","nodeType":"EnumDefinition","src":"13045:46:12"},{"canonicalName":"SwapKind","id":2387,"members":[{"id":2385,"name":"EXACT_IN","nameLocation":"13318:8:12","nodeType":"EnumValue","src":"13318:8:12"},{"id":2386,"name":"EXACT_OUT","nameLocation":"13332:9:12","nodeType":"EnumValue","src":"13332:9:12"}],"name":"SwapKind","nameLocation":"13303:8:12","nodeType":"EnumDefinition","src":"13298:45:12"},{"canonicalName":"VaultSwapParams","documentation":{"id":2388,"nodeType":"StructuredDocumentation","src":"14089:558:12","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":2406,"members":[{"constant":false,"id":2391,"mutability":"mutable","name":"kind","nameLocation":"14686:4:12","nodeType":"VariableDeclaration","scope":2406,"src":"14677:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"},"typeName":{"id":2390,"nodeType":"UserDefinedTypeName","pathNode":{"id":2389,"name":"SwapKind","nameLocations":["14677:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"14677:8:12"},"referencedDeclaration":2387,"src":"14677:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2393,"mutability":"mutable","name":"pool","nameLocation":"14704:4:12","nodeType":"VariableDeclaration","scope":2406,"src":"14696:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2392,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2396,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:12","nodeType":"VariableDeclaration","scope":2406,"src":"14714:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2395,"nodeType":"UserDefinedTypeName","pathNode":{"id":2394,"name":"IERC20","nameLocations":["14714:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"14714:6:12"},"referencedDeclaration":3290,"src":"14714:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2399,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:12","nodeType":"VariableDeclaration","scope":2406,"src":"14734:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2398,"nodeType":"UserDefinedTypeName","pathNode":{"id":2397,"name":"IERC20","nameLocations":["14734:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"14734:6:12"},"referencedDeclaration":3290,"src":"14734:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2401,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:12","nodeType":"VariableDeclaration","scope":2406,"src":"14755:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2400,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2403,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:12","nodeType":"VariableDeclaration","scope":2406,"src":"14783:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2402,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2405,"mutability":"mutable","name":"userData","nameLocation":"14811:8:12","nodeType":"VariableDeclaration","scope":2406,"src":"14805:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2404,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:12","nodeType":"StructDefinition","scope":2524,"src":"14648:174:12","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":2407,"nodeType":"StructuredDocumentation","src":"14824:530:12","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":2424,"members":[{"constant":false,"id":2410,"mutability":"mutable","name":"kind","nameLocation":"15392:4:12","nodeType":"VariableDeclaration","scope":2424,"src":"15383:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"},"typeName":{"id":2409,"nodeType":"UserDefinedTypeName","pathNode":{"id":2408,"name":"SwapKind","nameLocations":["15383:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"15383:8:12"},"referencedDeclaration":2387,"src":"15383:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2412,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:12","nodeType":"VariableDeclaration","scope":2424,"src":"15402:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2411,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2415,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:12","nodeType":"VariableDeclaration","scope":2424,"src":"15435:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2413,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2414,"nodeType":"ArrayTypeName","src":"15435:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2417,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:12","nodeType":"VariableDeclaration","scope":2424,"src":"15467:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2416,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2419,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:12","nodeType":"VariableDeclaration","scope":2424,"src":"15488:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2418,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2421,"mutability":"mutable","name":"router","nameLocation":"15518:6:12","nodeType":"VariableDeclaration","scope":2424,"src":"15510:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2420,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2423,"mutability":"mutable","name":"userData","nameLocation":"15536:8:12","nodeType":"VariableDeclaration","scope":2424,"src":"15530:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2422,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:12","nodeType":"StructDefinition","scope":2524,"src":"15355:192:12","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":2425,"nodeType":"StructuredDocumentation","src":"15549:813:12","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":2453,"members":[{"constant":false,"id":2428,"mutability":"mutable","name":"kind","nameLocation":"16401:4:12","nodeType":"VariableDeclaration","scope":2453,"src":"16392:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"},"typeName":{"id":2427,"nodeType":"UserDefinedTypeName","pathNode":{"id":2426,"name":"SwapKind","nameLocations":["16392:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"16392:8:12"},"referencedDeclaration":2387,"src":"16392:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2431,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:12","nodeType":"VariableDeclaration","scope":2453,"src":"16411:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2430,"nodeType":"UserDefinedTypeName","pathNode":{"id":2429,"name":"IERC20","nameLocations":["16411:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"16411:6:12"},"referencedDeclaration":3290,"src":"16411:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2434,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:12","nodeType":"VariableDeclaration","scope":2453,"src":"16431:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2433,"nodeType":"UserDefinedTypeName","pathNode":{"id":2432,"name":"IERC20","nameLocations":["16431:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"16431:6:12"},"referencedDeclaration":3290,"src":"16431:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2436,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:12","nodeType":"VariableDeclaration","scope":2453,"src":"16452:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2435,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2438,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:12","nodeType":"VariableDeclaration","scope":2453,"src":"16482:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2437,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2440,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:12","nodeType":"VariableDeclaration","scope":2453,"src":"16513:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2439,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2442,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:12","nodeType":"VariableDeclaration","scope":2453,"src":"16549:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2441,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2444,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:12","nodeType":"VariableDeclaration","scope":2453,"src":"16586:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2443,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2446,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:12","nodeType":"VariableDeclaration","scope":2453,"src":"16624:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2445,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2448,"mutability":"mutable","name":"router","nameLocation":"16665:6:12","nodeType":"VariableDeclaration","scope":2453,"src":"16657:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2447,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2450,"mutability":"mutable","name":"pool","nameLocation":"16685:4:12","nodeType":"VariableDeclaration","scope":2453,"src":"16677:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2449,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2452,"mutability":"mutable","name":"userData","nameLocation":"16701:8:12","nodeType":"VariableDeclaration","scope":2453,"src":"16695:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2451,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:12","nodeType":"StructDefinition","scope":2524,"src":"16363:349:12","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":2459,"members":[{"id":2454,"name":"PROPORTIONAL","nameLocation":"16951:12:12","nodeType":"EnumValue","src":"16951:12:12"},{"id":2455,"name":"UNBALANCED","nameLocation":"16969:10:12","nodeType":"EnumValue","src":"16969:10:12"},{"id":2456,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:12","nodeType":"EnumValue","src":"16985:22:12"},{"id":2457,"name":"DONATION","nameLocation":"17013:8:12","nodeType":"EnumValue","src":"17013:8:12"},{"id":2458,"name":"CUSTOM","nameLocation":"17027:6:12","nodeType":"EnumValue","src":"17027:6:12"}],"name":"AddLiquidityKind","nameLocation":"16928:16:12","nodeType":"EnumDefinition","src":"16923:112:12"},{"canonicalName":"AddLiquidityParams","documentation":{"id":2460,"nodeType":"StructuredDocumentation","src":"17037:320:12","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":2475,"members":[{"constant":false,"id":2462,"mutability":"mutable","name":"pool","nameLocation":"17398:4:12","nodeType":"VariableDeclaration","scope":2475,"src":"17390:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2461,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2464,"mutability":"mutable","name":"to","nameLocation":"17416:2:12","nodeType":"VariableDeclaration","scope":2475,"src":"17408:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2463,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2467,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:12","nodeType":"VariableDeclaration","scope":2475,"src":"17424:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2465,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2466,"nodeType":"ArrayTypeName","src":"17424:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2469,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:12","nodeType":"VariableDeclaration","scope":2475,"src":"17452:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2468,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2472,"mutability":"mutable","name":"kind","nameLocation":"17498:4:12","nodeType":"VariableDeclaration","scope":2475,"src":"17481:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"},"typeName":{"id":2471,"nodeType":"UserDefinedTypeName","pathNode":{"id":2470,"name":"AddLiquidityKind","nameLocations":["17481:16:12"],"nodeType":"IdentifierPath","referencedDeclaration":2459,"src":"17481:16:12"},"referencedDeclaration":2459,"src":"17481:16:12","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2459","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2474,"mutability":"mutable","name":"userData","nameLocation":"17514:8:12","nodeType":"VariableDeclaration","scope":2475,"src":"17508:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2473,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:12","nodeType":"StructDefinition","scope":2524,"src":"17358:167:12","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":2480,"members":[{"id":2476,"name":"PROPORTIONAL","nameLocation":"17770:12:12","nodeType":"EnumValue","src":"17770:12:12"},{"id":2477,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:12","nodeType":"EnumValue","src":"17788:21:12"},{"id":2478,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:12","nodeType":"EnumValue","src":"17815:22:12"},{"id":2479,"name":"CUSTOM","nameLocation":"17843:6:12","nodeType":"EnumValue","src":"17843:6:12"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:12","nodeType":"EnumDefinition","src":"17739:112:12"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":2481,"nodeType":"StructuredDocumentation","src":"17853:330:12","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":2496,"members":[{"constant":false,"id":2483,"mutability":"mutable","name":"pool","nameLocation":"18227:4:12","nodeType":"VariableDeclaration","scope":2496,"src":"18219:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2482,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2485,"mutability":"mutable","name":"from","nameLocation":"18245:4:12","nodeType":"VariableDeclaration","scope":2496,"src":"18237:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2484,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2487,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:12","nodeType":"VariableDeclaration","scope":2496,"src":"18255:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2486,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2490,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:12","nodeType":"VariableDeclaration","scope":2496,"src":"18283:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2488,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2489,"nodeType":"ArrayTypeName","src":"18283:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2493,"mutability":"mutable","name":"kind","nameLocation":"18332:4:12","nodeType":"VariableDeclaration","scope":2496,"src":"18312:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2492,"nodeType":"UserDefinedTypeName","pathNode":{"id":2491,"name":"RemoveLiquidityKind","nameLocations":["18312:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2480,"src":"18312:19:12"},"referencedDeclaration":2480,"src":"18312:19:12","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2480","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2495,"mutability":"mutable","name":"userData","nameLocation":"18348:8:12","nodeType":"VariableDeclaration","scope":2496,"src":"18342:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2494,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:12","nodeType":"StructDefinition","scope":2524,"src":"18184:175:12","visibility":"public"},{"canonicalName":"WrappingDirection","id":2499,"members":[{"id":2497,"name":"WRAP","nameLocation":"18602:4:12","nodeType":"EnumValue","src":"18602:4:12"},{"id":2498,"name":"UNWRAP","nameLocation":"18612:6:12","nodeType":"EnumValue","src":"18612:6:12"}],"name":"WrappingDirection","nameLocation":"18578:17:12","nodeType":"EnumDefinition","src":"18573:47:12"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":2500,"nodeType":"StructuredDocumentation","src":"18622:499:12","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":2514,"members":[{"constant":false,"id":2503,"mutability":"mutable","name":"kind","nameLocation":"19169:4:12","nodeType":"VariableDeclaration","scope":2514,"src":"19160:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"},"typeName":{"id":2502,"nodeType":"UserDefinedTypeName","pathNode":{"id":2501,"name":"SwapKind","nameLocations":["19160:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"19160:8:12"},"referencedDeclaration":2387,"src":"19160:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2387","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2506,"mutability":"mutable","name":"direction","nameLocation":"19197:9:12","nodeType":"VariableDeclaration","scope":2514,"src":"19179:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2499","typeString":"enum WrappingDirection"},"typeName":{"id":2505,"nodeType":"UserDefinedTypeName","pathNode":{"id":2504,"name":"WrappingDirection","nameLocations":["19179:17:12"],"nodeType":"IdentifierPath","referencedDeclaration":2499,"src":"19179:17:12"},"referencedDeclaration":2499,"src":"19179:17:12","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2499","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":2509,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:12","nodeType":"VariableDeclaration","scope":2514,"src":"19212:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"},"typeName":{"id":2508,"nodeType":"UserDefinedTypeName","pathNode":{"id":2507,"name":"IERC4626","nameLocations":["19212:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":3212,"src":"19212:8:12"},"referencedDeclaration":3212,"src":"19212:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$3212","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2511,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:12","nodeType":"VariableDeclaration","scope":2514,"src":"19239:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2510,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2513,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:12","nodeType":"VariableDeclaration","scope":2514,"src":"19267:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2512,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:12","nodeType":"StructDefinition","scope":2524,"src":"19122:164:12","visibility":"public"},{"constant":true,"id":2517,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:12","nodeType":"VariableDeclaration","scope":2524,"src":"19594:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2515,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":2516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:12","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":2520,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:12","nodeType":"VariableDeclaration","scope":2524,"src":"19631:42:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2518,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":2519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:12","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":2523,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:12","nodeType":"VariableDeclaration","scope":2524,"src":"19879:48:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2521,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":2522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:12","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:12"},"id":12},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[2603],"IAuthentication":[14]},"id":2604,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2525,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":2527,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2604,"sourceUnit":15,"src":"72:116:13","symbolAliases":[{"foreign":{"id":2526,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2529,"name":"IAuthentication","nameLocations":["625:15:13"],"nodeType":"IdentifierPath","referencedDeclaration":14,"src":"625:15:13"},"id":2530,"nodeType":"InheritanceSpecifier","src":"625:15:13"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2528,"nodeType":"StructuredDocumentation","src":"190:398:13","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":2603,"linearizedBaseContracts":[2603,14],"name":"Authentication","nameLocation":"607:14:13","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2532,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:13","nodeType":"VariableDeclaration","scope":2603,"src":"647:48:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2531,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":2542,"nodeType":"Block","src":"1337:63:13","statements":[{"expression":{"id":2540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2538,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2532,"src":"1347:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2539,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"1372:21:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2541,"nodeType":"ExpressionStatement","src":"1347:46:13"}]},"documentation":{"id":2533,"nodeType":"StructuredDocumentation","src":"702:587:13","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":2543,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2535,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:13","nodeType":"VariableDeclaration","scope":2543,"src":"1306:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2534,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:13"},"returnParameters":{"id":2537,"nodeType":"ParameterList","parameters":[],"src":"1337:0:13"},"scope":2603,"src":"1294:106:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2550,"nodeType":"Block","src":"1549:49:13","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2546,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2574,"src":"1559:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2548,"nodeType":"ExpressionStatement","src":"1559:21:13"},{"id":2549,"nodeType":"PlaceholderStatement","src":"1590:1:13"}]},"documentation":{"id":2544,"nodeType":"StructuredDocumentation","src":"1406:114:13","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":2551,"name":"authenticate","nameLocation":"1534:12:13","nodeType":"ModifierDefinition","parameters":{"id":2545,"nodeType":"ParameterList","parameters":[],"src":"1546:2:13"},"src":"1525:73:13","virtual":false,"visibility":"internal"},{"body":{"id":2573,"nodeType":"Block","src":"1733:156:13","statements":[{"assignments":[2556],"declarations":[{"constant":false,"id":2556,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:13","nodeType":"VariableDeclaration","scope":2573,"src":"1743:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2555,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2561,"initialValue":{"arguments":[{"expression":{"id":2558,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:13","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":2557,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2592,"src":"1762:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":2560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:13"},{"condition":{"id":2567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:13","subExpression":{"arguments":[{"id":2563,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2556,"src":"1810:8:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2564,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:13","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2562,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2602,"src":"1798:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2572,"nodeType":"IfStatement","src":"1793:90:13","trueBody":{"id":2571,"nodeType":"Block","src":"1833:50:13","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2568,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"1854:16:13","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2570,"nodeType":"RevertStatement","src":"1847:25:13"}]}}]},"documentation":{"id":2552,"nodeType":"StructuredDocumentation","src":"1604:79:13","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":2574,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:13","nodeType":"FunctionDefinition","parameters":{"id":2553,"nodeType":"ParameterList","parameters":[],"src":"1716:2:13"},"returnParameters":{"id":2554,"nodeType":"ParameterList","parameters":[],"src":"1733:0:13"},"scope":2603,"src":"1688:201:13","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[13],"body":{"id":2591,"nodeType":"Block","src":"2008:353:13","statements":[{"expression":{"arguments":[{"arguments":[{"id":2586,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2532,"src":"2320:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2587,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"2344:8:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":2584,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:13","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2583,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:13","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2582,"id":2590,"nodeType":"Return","src":"2286:68:13"}]},"documentation":{"id":2575,"nodeType":"StructuredDocumentation","src":"1895:31:13","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":2592,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:13","nodeType":"FunctionDefinition","overrides":{"id":2579,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:13"},"parameters":{"id":2578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2577,"mutability":"mutable","name":"selector","nameLocation":"1959:8:13","nodeType":"VariableDeclaration","scope":2592,"src":"1952:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2576,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:13"},"returnParameters":{"id":2582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2592,"src":"1999:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2580,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:13"},"scope":2603,"src":"1931:430:13","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":2593,"nodeType":"StructuredDocumentation","src":"2367:304:13","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":2602,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:13","nodeType":"FunctionDefinition","parameters":{"id":2598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2595,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:13","nodeType":"VariableDeclaration","scope":2602,"src":"2697:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2594,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2597,"mutability":"mutable","name":"user","nameLocation":"2723:4:13","nodeType":"VariableDeclaration","scope":2602,"src":"2715:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2596,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:13"},"returnParameters":{"id":2601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2602,"src":"2760:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2599,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:13"},"scope":2603,"src":"2676:90:13","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":2604,"src":"589:2179:13","usedErrors":[5],"usedEvents":[]}],"src":"46:2723:13"},"id":13},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[2635],"IERC20":[3290]},"id":2636,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2605,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2607,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2636,"sourceUnit":3291,"src":"72:72:14","symbolAliases":[{"foreign":{"id":2606,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":2608,"nodeType":"StructuredDocumentation","src":"146:71:14","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":2635,"linearizedBaseContracts":[2635],"name":"CastingHelpers","nameLocation":"225:14:14","nodeType":"ContractDefinition","nodes":[{"body":{"id":2620,"nodeType":"Block","src":"410:140:14","statements":[{"AST":{"nativeSrc":"501:43:14","nodeType":"YulBlock","src":"501:43:14","statements":[{"nativeSrc":"515:19:14","nodeType":"YulAssignment","src":"515:19:14","value":{"name":"addresses","nativeSrc":"525:9:14","nodeType":"YulIdentifier","src":"525:9:14"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:14","nodeType":"YulIdentifier","src":"515:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2612,"isOffset":false,"isSlot":false,"src":"525:9:14","valueSize":1},{"declaration":2617,"isOffset":false,"isSlot":false,"src":"515:6:14","valueSize":1}],"flags":["memory-safe"],"id":2619,"nodeType":"InlineAssembly","src":"476:68:14"}]},"documentation":{"id":2609,"nodeType":"StructuredDocumentation","src":"246:66:14","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":2621,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:14","nodeType":"FunctionDefinition","parameters":{"id":2613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2612,"mutability":"mutable","name":"addresses","nameLocation":"352:9:14","nodeType":"VariableDeclaration","scope":2621,"src":"335:26:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2610,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2611,"nodeType":"ArrayTypeName","src":"335:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:14"},"returnParameters":{"id":2618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2617,"mutability":"mutable","name":"tokens","nameLocation":"402:6:14","nodeType":"VariableDeclaration","scope":2621,"src":"386:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2615,"nodeType":"UserDefinedTypeName","pathNode":{"id":2614,"name":"IERC20","nameLocations":["386:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"386:6:14"},"referencedDeclaration":3290,"src":"386:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2616,"nodeType":"ArrayTypeName","src":"386:8:14","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:14"},"scope":2635,"src":"317:233:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2633,"nodeType":"Block","src":"712:140:14","statements":[{"AST":{"nativeSrc":"803:43:14","nodeType":"YulBlock","src":"803:43:14","statements":[{"nativeSrc":"817:19:14","nodeType":"YulAssignment","src":"817:19:14","value":{"name":"tokens","nativeSrc":"830:6:14","nodeType":"YulIdentifier","src":"830:6:14"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:14","nodeType":"YulIdentifier","src":"817:9:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2630,"isOffset":false,"isSlot":false,"src":"817:9:14","valueSize":1},{"declaration":2626,"isOffset":false,"isSlot":false,"src":"830:6:14","valueSize":1}],"flags":["memory-safe"],"id":2632,"nodeType":"InlineAssembly","src":"778:68:14"}]},"documentation":{"id":2622,"nodeType":"StructuredDocumentation","src":"556:57:14","text":"@dev Returns an IERC20[] array as an address[] array."},"id":2634,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:14","nodeType":"FunctionDefinition","parameters":{"id":2627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2626,"mutability":"mutable","name":"tokens","nameLocation":"653:6:14","nodeType":"VariableDeclaration","scope":2634,"src":"637:22:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2624,"nodeType":"UserDefinedTypeName","pathNode":{"id":2623,"name":"IERC20","nameLocations":["637:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"637:6:14"},"referencedDeclaration":3290,"src":"637:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2625,"nodeType":"ArrayTypeName","src":"637:8:14","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:14"},"returnParameters":{"id":2631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2630,"mutability":"mutable","name":"addresses","nameLocation":"701:9:14","nodeType":"VariableDeclaration","scope":2634,"src":"684:26:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2628,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2629,"nodeType":"ArrayTypeName","src":"684:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:14"},"scope":2635,"src":"618:234:14","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2636,"src":"217:637:14","usedErrors":[],"usedEvents":[]}],"src":"46:809:14"},"id":14},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[2635],"IERC20":[3290],"InputHelpers":[2936]},"id":2937,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2637,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2937,"sourceUnit":3291,"src":"72:72:15","symbolAliases":[{"foreign":{"id":2638,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"81:6:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":2641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2937,"sourceUnit":2636,"src":"146:54:15","symbolAliases":[{"foreign":{"id":2640,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2635,"src":"155:14:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":2936,"linearizedBaseContracts":[2936],"name":"InputHelpers","nameLocation":"210:12:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2642,"nodeType":"StructuredDocumentation","src":"229:91:15","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":2644,"name":"InputLengthMismatch","nameLocation":"331:19:15","nodeType":"ErrorDefinition","parameters":{"id":2643,"nodeType":"ParameterList","parameters":[],"src":"350:2:15"},"src":"325:28:15"},{"documentation":{"id":2645,"nodeType":"StructuredDocumentation","src":"359:332:15","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":2647,"name":"MultipleNonZeroInputs","nameLocation":"702:21:15","nodeType":"ErrorDefinition","parameters":{"id":2646,"nodeType":"ParameterList","parameters":[],"src":"723:2:15"},"src":"696:30:15"},{"documentation":{"id":2648,"nodeType":"StructuredDocumentation","src":"732:298:15","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":2650,"name":"AllZeroInputs","nameLocation":"1041:13:15","nodeType":"ErrorDefinition","parameters":{"id":2649,"nodeType":"ParameterList","parameters":[],"src":"1054:2:15"},"src":"1035:22:15"},{"documentation":{"id":2651,"nodeType":"StructuredDocumentation","src":"1063:320:15","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":2653,"name":"TokensNotSorted","nameLocation":"1394:15:15","nodeType":"ErrorDefinition","parameters":{"id":2652,"nodeType":"ParameterList","parameters":[],"src":"1409:2:15"},"src":"1388:24:15"},{"body":{"id":2668,"nodeType":"Block","src":"1486:81:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2660,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"1500:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2661,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2657,"src":"1505:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2667,"nodeType":"IfStatement","src":"1496:65:15","trueBody":{"id":2666,"nodeType":"Block","src":"1508:53:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2663,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2644,"src":"1529:19:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2665,"nodeType":"RevertStatement","src":"1522:28:15"}]}}]},"id":2669,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:15","nodeType":"FunctionDefinition","parameters":{"id":2658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2655,"mutability":"mutable","name":"a","nameLocation":"1458:1:15","nodeType":"VariableDeclaration","scope":2669,"src":"1450:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2654,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2657,"mutability":"mutable","name":"b","nameLocation":"1469:1:15","nodeType":"VariableDeclaration","scope":2669,"src":"1461:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2656,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:15"},"returnParameters":{"id":2659,"nodeType":"ParameterList","parameters":[],"src":"1486:0:15"},"scope":2936,"src":"1418:149:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2690,"nodeType":"Block","src":"1652:91:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2678,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2671,"src":"1666:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2679,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2673,"src":"1671:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2681,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2673,"src":"1676:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2682,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2675,"src":"1681:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2689,"nodeType":"IfStatement","src":"1662:75:15","trueBody":{"id":2688,"nodeType":"Block","src":"1684:53:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2685,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2644,"src":"1705:19:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2687,"nodeType":"RevertStatement","src":"1698:28:15"}]}}]},"id":2691,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:15","nodeType":"FunctionDefinition","parameters":{"id":2676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2671,"mutability":"mutable","name":"a","nameLocation":"1613:1:15","nodeType":"VariableDeclaration","scope":2691,"src":"1605:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2670,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2673,"mutability":"mutable","name":"b","nameLocation":"1624:1:15","nodeType":"VariableDeclaration","scope":2691,"src":"1616:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2672,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2675,"mutability":"mutable","name":"c","nameLocation":"1635:1:15","nodeType":"VariableDeclaration","scope":2691,"src":"1627:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2674,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:15"},"returnParameters":{"id":2677,"nodeType":"ParameterList","parameters":[],"src":"1652:0:15"},"scope":2936,"src":"1573:170:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2749,"nodeType":"Block","src":"1938:451:15","statements":[{"assignments":[2700],"declarations":[{"constant":false,"id":2700,"mutability":"mutable","name":"length","nameLocation":"1956:6:15","nodeType":"VariableDeclaration","scope":2749,"src":"1948:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2699,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2703,"initialValue":{"expression":{"id":2701,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2694,"src":"1965:12:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:15","memberName":"length","nodeType":"MemberAccess","src":"1965:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:15"},{"expression":{"id":2706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2704,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"1994:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2705,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"2007:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2707,"nodeType":"ExpressionStatement","src":"1994:19:15"},{"body":{"id":2737,"nodeType":"Block","src":"2061:211:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2718,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2694,"src":"2079:12:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2720,"indexExpression":{"id":2719,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"2092:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2736,"nodeType":"IfStatement","src":"2075:187:15","trueBody":{"id":2735,"nodeType":"Block","src":"2101:161:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2723,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"2123:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2724,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"2137:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2730,"nodeType":"IfStatement","src":"2119:97:15","trueBody":{"id":2729,"nodeType":"Block","src":"2145:71:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2726,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2647,"src":"2174:21:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2728,"nodeType":"RevertStatement","src":"2167:30:15"}]}},{"expression":{"id":2733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2731,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"2233:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2732,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"2246:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2734,"nodeType":"ExpressionStatement","src":"2233:14:15"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2712,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"2044:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2713,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"2048:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2738,"initializationExpression":{"assignments":[2709],"declarations":[{"constant":false,"id":2709,"mutability":"mutable","name":"i","nameLocation":"2037:1:15","nodeType":"VariableDeclaration","scope":2738,"src":"2029:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2708,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2711,"initialValue":{"hexValue":"30","id":2710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:15","subExpression":{"id":2715,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"2058:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2717,"nodeType":"ExpressionStatement","src":"2056:3:15"},"nodeType":"ForStatement","src":"2024:248:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2739,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"2286:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2740,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"2300:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2746,"nodeType":"IfStatement","src":"2282:73:15","trueBody":{"id":2745,"nodeType":"Block","src":"2308:47:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2742,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2650,"src":"2329:13:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2744,"nodeType":"RevertStatement","src":"2322:22:15"}]}},{"expression":{"id":2747,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2697,"src":"2372:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2698,"id":2748,"nodeType":"Return","src":"2365:17:15"}]},"id":2750,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:15","nodeType":"FunctionDefinition","parameters":{"id":2695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2694,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:15","nodeType":"VariableDeclaration","scope":2750,"src":"1864:29:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2692,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2693,"nodeType":"ArrayTypeName","src":"1864:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:15"},"returnParameters":{"id":2698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2697,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:15","nodeType":"VariableDeclaration","scope":2750,"src":"1918:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2696,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:15"},"scope":2936,"src":"1835:554:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2827,"nodeType":"Block","src":"3138:376:15","statements":[{"body":{"id":2823,"nodeType":"Block","src":"3196:288:15","statements":[{"body":{"id":2821,"nodeType":"Block","src":"3262:212:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"id":2798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2790,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3284:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2792,"indexExpression":{"id":2791,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3291:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":2793,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3296:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2797,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2794,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3303:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"src":"3284:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2820,"nodeType":"IfStatement","src":"3280:180:15","trueBody":{"id":2819,"nodeType":"Block","src":"3311:149:15","statements":[{"expression":{"id":2817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":2799,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3387:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2801,"indexExpression":{"id":2800,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3394:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},{"baseExpression":{"id":2802,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3398:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2806,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2803,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3405:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}}],"id":2807,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:15","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$3290_$_t_contract$_IERC20_$3290_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":2808,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3416:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2812,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2809,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3423:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},{"baseExpression":{"id":2813,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3431:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2815,"indexExpression":{"id":2814,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3438:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}}],"id":2816,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:15","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$3290_$_t_contract$_IERC20_$3290_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:15","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2818,"nodeType":"ExpressionStatement","src":"3386:55:15"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2779,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3230:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2780,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3234:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:15","memberName":"length","nodeType":"MemberAccess","src":"3234:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2782,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"3250:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2822,"initializationExpression":{"assignments":[2776],"declarations":[{"constant":false,"id":2776,"mutability":"mutable","name":"j","nameLocation":"3223:1:15","nodeType":"VariableDeclaration","scope":2822,"src":"3215:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2775,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2778,"initialValue":{"hexValue":"30","id":2777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:15","subExpression":{"id":2787,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2776,"src":"3259:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2789,"nodeType":"ExpressionStatement","src":"3257:3:15"},"nodeType":"ForStatement","src":"3210:264:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2766,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"3168:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2767,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3172:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:15","memberName":"length","nodeType":"MemberAccess","src":"3172:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2824,"initializationExpression":{"assignments":[2763],"declarations":[{"constant":false,"id":2763,"mutability":"mutable","name":"i","nameLocation":"3161:1:15","nodeType":"VariableDeclaration","scope":2824,"src":"3153:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2762,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2765,"initialValue":{"hexValue":"30","id":2764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:15","subExpression":{"id":2772,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"3193:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2774,"nodeType":"ExpressionStatement","src":"3191:3:15"},"nodeType":"ForStatement","src":"3148:336:15"},{"expression":{"id":2825,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2755,"src":"3501:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":2761,"id":2826,"nodeType":"Return","src":"3494:13:15"}]},"documentation":{"id":2751,"nodeType":"StructuredDocumentation","src":"2395:654:15","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":2828,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:15","nodeType":"FunctionDefinition","parameters":{"id":2756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2755,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:15","nodeType":"VariableDeclaration","scope":2828,"src":"3074:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2753,"nodeType":"UserDefinedTypeName","pathNode":{"id":2752,"name":"IERC20","nameLocations":["3074:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3074:6:15"},"referencedDeclaration":3290,"src":"3074:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2754,"nodeType":"ArrayTypeName","src":"3074:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:15"},"returnParameters":{"id":2761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2828,"src":"3121:15:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2758,"nodeType":"UserDefinedTypeName","pathNode":{"id":2757,"name":"IERC20","nameLocations":["3121:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3121:6:15"},"referencedDeclaration":3290,"src":"3121:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2759,"nodeType":"ArrayTypeName","src":"3121:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:15"},"scope":2936,"src":"3054:460:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2882,"nodeType":"Block","src":"3686:341:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2836,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"3700:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:15","memberName":"length","nodeType":"MemberAccess","src":"3700:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":2838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2842,"nodeType":"IfStatement","src":"3696:54:15","trueBody":{"id":2841,"nodeType":"Block","src":"3719:31:15","statements":[{"functionReturnParameters":2835,"id":2840,"nodeType":"Return","src":"3733:7:15"}]}},{"assignments":[2845],"declarations":[{"constant":false,"id":2845,"mutability":"mutable","name":"previous","nameLocation":"3767:8:15","nodeType":"VariableDeclaration","scope":2882,"src":"3760:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2844,"nodeType":"UserDefinedTypeName","pathNode":{"id":2843,"name":"IERC20","nameLocations":["3760:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3760:6:15"},"referencedDeclaration":3290,"src":"3760:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"id":2849,"initialValue":{"baseExpression":{"id":2846,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"3778:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2848,"indexExpression":{"hexValue":"30","id":2847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:15"},{"body":{"id":2880,"nodeType":"Block","src":"3842:179:15","statements":[{"assignments":[2863],"declarations":[{"constant":false,"id":2863,"mutability":"mutable","name":"current","nameLocation":"3863:7:15","nodeType":"VariableDeclaration","scope":2880,"src":"3856:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"typeName":{"id":2862,"nodeType":"UserDefinedTypeName","pathNode":{"id":2861,"name":"IERC20","nameLocations":["3856:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3856:6:15"},"referencedDeclaration":3290,"src":"3856:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"visibility":"internal"}],"id":2867,"initialValue":{"baseExpression":{"id":2864,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"3873:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2866,"indexExpression":{"id":2865,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2851,"src":"3880:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:15"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"},"id":2870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2868,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2845,"src":"3901:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2869,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"3912:7:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"src":"3901:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2875,"nodeType":"IfStatement","src":"3897:81:15","trueBody":{"id":2874,"nodeType":"Block","src":"3921:57:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2871,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2653,"src":"3946:15:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2873,"nodeType":"RevertStatement","src":"3939:24:15"}]}},{"expression":{"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2876,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2845,"src":"3992:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2877,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2863,"src":"4003:7:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"src":"3992:18:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2879,"nodeType":"ExpressionStatement","src":"3992:18:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2854,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2851,"src":"3818:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2855,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2833,"src":"3822:6:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:15","memberName":"length","nodeType":"MemberAccess","src":"3822:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2881,"initializationExpression":{"assignments":[2851],"declarations":[{"constant":false,"id":2851,"mutability":"mutable","name":"i","nameLocation":"3811:1:15","nodeType":"VariableDeclaration","scope":2881,"src":"3803:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2850,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2853,"initialValue":{"hexValue":"31","id":2852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:15","subExpression":{"id":2858,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2851,"src":"3839:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2860,"nodeType":"ExpressionStatement","src":"3837:3:15"},"nodeType":"ForStatement","src":"3798:223:15"}]},"documentation":{"id":2829,"nodeType":"StructuredDocumentation","src":"3520:95:15","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":2883,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:15","nodeType":"FunctionDefinition","parameters":{"id":2834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2833,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:15","nodeType":"VariableDeclaration","scope":2883,"src":"3648:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2831,"nodeType":"UserDefinedTypeName","pathNode":{"id":2830,"name":"IERC20","nameLocations":["3648:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"3648:6:15"},"referencedDeclaration":3290,"src":"3648:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$3290","typeString":"contract IERC20"}},"id":2832,"nodeType":"ArrayTypeName","src":"3648:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$3290_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:15"},"returnParameters":{"id":2835,"nodeType":"ParameterList","parameters":[],"src":"3686:0:15"},"scope":2936,"src":"3620:407:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2934,"nodeType":"Block","src":"4203:347:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2890,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"4217:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:15","memberName":"length","nodeType":"MemberAccess","src":"4217:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":2892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2896,"nodeType":"IfStatement","src":"4213:55:15","trueBody":{"id":2895,"nodeType":"Block","src":"4237:31:15","statements":[{"functionReturnParameters":2889,"id":2894,"nodeType":"Return","src":"4251:7:15"}]}},{"assignments":[2898],"declarations":[{"constant":false,"id":2898,"mutability":"mutable","name":"previous","nameLocation":"4286:8:15","nodeType":"VariableDeclaration","scope":2934,"src":"4278:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2897,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2902,"initialValue":{"baseExpression":{"id":2899,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"4297:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2901,"indexExpression":{"hexValue":"30","id":2900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:15"},{"body":{"id":2932,"nodeType":"Block","src":"4363:181:15","statements":[{"assignments":[2915],"declarations":[{"constant":false,"id":2915,"mutability":"mutable","name":"current","nameLocation":"4385:7:15","nodeType":"VariableDeclaration","scope":2932,"src":"4377:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2914,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2919,"initialValue":{"baseExpression":{"id":2916,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"4395:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2918,"indexExpression":{"id":2917,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"4403:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2920,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"4424:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2921,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2915,"src":"4435:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2927,"nodeType":"IfStatement","src":"4420:81:15","trueBody":{"id":2926,"nodeType":"Block","src":"4444:57:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2923,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2653,"src":"4469:15:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2925,"nodeType":"RevertStatement","src":"4462:24:15"}]}},{"expression":{"id":2930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2928,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"4515:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2929,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2915,"src":"4526:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2931,"nodeType":"ExpressionStatement","src":"4515:18:15"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2907,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"4338:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2908,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2887,"src":"4342:7:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:15","memberName":"length","nodeType":"MemberAccess","src":"4342:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2933,"initializationExpression":{"assignments":[2904],"declarations":[{"constant":false,"id":2904,"mutability":"mutable","name":"i","nameLocation":"4331:1:15","nodeType":"VariableDeclaration","scope":2933,"src":"4323:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2903,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2906,"initialValue":{"hexValue":"31","id":2905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:15"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:15","subExpression":{"id":2911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"4360:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2913,"nodeType":"ExpressionStatement","src":"4358:3:15"},"nodeType":"ForStatement","src":"4318:226:15"}]},"documentation":{"id":2884,"nodeType":"StructuredDocumentation","src":"4033:96:15","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":2935,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:15","nodeType":"FunctionDefinition","parameters":{"id":2888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2887,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:15","nodeType":"VariableDeclaration","scope":2935,"src":"4163:24:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2885,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2886,"nodeType":"ArrayTypeName","src":"4163:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:15"},"returnParameters":{"id":2889,"nodeType":"ParameterList","parameters":[],"src":"4203:0:15"},"scope":2936,"src":"4134:416:15","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2937,"src":"202:4350:15","usedErrors":[2644,2647,2650,2653],"usedEvents":[]}],"src":"46:4507:15"},"id":15},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"Authentication":[2603],"IAuthorizer":[218],"IVault":[763],"SingletonAuthentication":[3042]},"id":3043,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2938,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":2940,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3043,"sourceUnit":219,"src":"72:91:16","symbolAliases":[{"foreign":{"id":2939,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"81:11:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":2942,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3043,"sourceUnit":764,"src":"164:81:16","symbolAliases":[{"foreign":{"id":2941,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"173:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":2944,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3043,"sourceUnit":2604,"src":"247:103:16","symbolAliases":[{"foreign":{"id":2943,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2603,"src":"256:14:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2946,"name":"Authentication","nameLocations":["772:14:16"],"nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"772:14:16"},"id":2947,"nodeType":"InheritanceSpecifier","src":"772:14:16"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2945,"nodeType":"StructuredDocumentation","src":"352:374:16","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":3042,"linearizedBaseContracts":[3042,2603,14],"name":"SingletonAuthentication","nameLocation":"745:23:16","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2950,"mutability":"immutable","name":"_vault","nameLocation":"818:6:16","nodeType":"VariableDeclaration","scope":3042,"src":"793:31:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":2949,"nodeType":"UserDefinedTypeName","pathNode":{"id":2948,"name":"IVault","nameLocations":["793:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"793:6:16"},"referencedDeclaration":763,"src":"793:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":2975,"nodeType":"Block","src":"988:31:16","statements":[{"expression":{"id":2973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2971,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2950,"src":"998:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2972,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"1007:5:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"src":"998:14:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"id":2974,"nodeType":"ExpressionStatement","src":"998:14:16"}]},"id":2976,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":2964,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"978:4:16","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}],"id":2963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"970:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2962,"name":"address","nodeType":"ElementaryTypeName","src":"970:7:16","typeDescriptions":{}}},"id":2965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"962:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":2960,"name":"uint160","nodeType":"ElementaryTypeName","src":"962:7:16","typeDescriptions":{}}},"id":2966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"962:22:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":2959,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"954:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2958,"name":"uint256","nodeType":"ElementaryTypeName","src":"954:7:16","typeDescriptions":{}}},"id":2967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"954:31:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2957,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"946:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2956,"name":"bytes32","nodeType":"ElementaryTypeName","src":"946:7:16","typeDescriptions":{}}},"id":2968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"946:40:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2969,"kind":"baseConstructorSpecifier","modifierName":{"id":2955,"name":"Authentication","nameLocations":["931:14:16"],"nodeType":"IdentifierPath","referencedDeclaration":2603,"src":"931:14:16"},"nodeType":"ModifierInvocation","src":"931:56:16"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2953,"mutability":"mutable","name":"vault","nameLocation":"924:5:16","nodeType":"VariableDeclaration","scope":2976,"src":"917:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":2952,"nodeType":"UserDefinedTypeName","pathNode":{"id":2951,"name":"IVault","nameLocations":["917:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"917:6:16"},"referencedDeclaration":763,"src":"917:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"916:14:16"},"returnParameters":{"id":2970,"nodeType":"ParameterList","parameters":[],"src":"988:0:16"},"scope":3042,"src":"905:114:16","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2985,"nodeType":"Block","src":"1199:30:16","statements":[{"expression":{"id":2983,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2950,"src":"1216:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"functionReturnParameters":2982,"id":2984,"nodeType":"Return","src":"1209:13:16"}]},"documentation":{"id":2977,"nodeType":"StructuredDocumentation","src":"1025:120:16","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":2986,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1159:8:16","nodeType":"FunctionDefinition","parameters":{"id":2978,"nodeType":"ParameterList","parameters":[],"src":"1167:2:16"},"returnParameters":{"id":2982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2986,"src":"1191:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":2980,"nodeType":"UserDefinedTypeName","pathNode":{"id":2979,"name":"IVault","nameLocations":["1191:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"1191:6:16"},"referencedDeclaration":763,"src":"1191:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1190:8:16"},"scope":3042,"src":"1150:79:16","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":2998,"nodeType":"Block","src":"1425:50:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2993,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2986,"src":"1442:8:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$763_$","typeString":"function () view returns (contract IVault)"}},"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:10:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"id":2995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1453:13:16","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2077,"src":"1442:24:16","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$218_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":2996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:26:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"functionReturnParameters":2992,"id":2997,"nodeType":"Return","src":"1435:33:16"}]},"documentation":{"id":2987,"nodeType":"StructuredDocumentation","src":"1235:126:16","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":2999,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1375:13:16","nodeType":"FunctionDefinition","parameters":{"id":2988,"nodeType":"ParameterList","parameters":[],"src":"1388:2:16"},"returnParameters":{"id":2992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2999,"src":"1412:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"},"typeName":{"id":2990,"nodeType":"UserDefinedTypeName","pathNode":{"id":2989,"name":"IAuthorizer","nameLocations":["1412:11:16"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"1412:11:16"},"referencedDeclaration":218,"src":"1412:11:16","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1411:13:16"},"scope":3042,"src":"1366:109:16","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[2602],"body":{"id":3020,"nodeType":"Block","src":"1575:84:16","statements":[{"expression":{"arguments":[{"id":3012,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3001,"src":"1619:8:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3013,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"1629:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":3016,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1646:4:16","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}],"id":3015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1638:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3014,"name":"address","nodeType":"ElementaryTypeName","src":"1638:7:16","typeDescriptions":{}}},"id":3017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1638:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3009,"name":"getAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2999,"src":"1592:13:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$218_$","typeString":"function () view returns (contract IAuthorizer)"}},"id":3010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1592:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"id":3011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1608:10:16","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":217,"src":"1592:26:16","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":3018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1592:60:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3008,"id":3019,"nodeType":"Return","src":"1585:67:16"}]},"id":3021,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1490:11:16","nodeType":"FunctionDefinition","overrides":{"id":3005,"nodeType":"OverrideSpecifier","overrides":[],"src":"1551:8:16"},"parameters":{"id":3004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3001,"mutability":"mutable","name":"actionId","nameLocation":"1510:8:16","nodeType":"VariableDeclaration","scope":3021,"src":"1502:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3000,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1502:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3003,"mutability":"mutable","name":"account","nameLocation":"1528:7:16","nodeType":"VariableDeclaration","scope":3021,"src":"1520:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3002,"name":"address","nodeType":"ElementaryTypeName","src":"1520:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1501:35:16"},"returnParameters":{"id":3008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3007,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3021,"src":"1569:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3006,"name":"bool","nodeType":"ElementaryTypeName","src":"1569:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1568:6:16"},"scope":3042,"src":"1481:178:16","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3040,"nodeType":"Block","src":"1765:76:16","statements":[{"expression":{"arguments":[{"id":3035,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3023,"src":"1809:8:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3036,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3025,"src":"1819:7:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3037,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3027,"src":"1828:5:16","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3032,"name":"getAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2999,"src":"1782:13:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$218_$","typeString":"function () view returns (contract IAuthorizer)"}},"id":3033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1782:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}},"id":3034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1798:10:16","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":217,"src":"1782:26:16","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":3038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1782:52:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3031,"id":3039,"nodeType":"Return","src":"1775:59:16"}]},"id":3041,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1674:11:16","nodeType":"FunctionDefinition","parameters":{"id":3028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3023,"mutability":"mutable","name":"actionId","nameLocation":"1694:8:16","nodeType":"VariableDeclaration","scope":3041,"src":"1686:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3022,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1686:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3025,"mutability":"mutable","name":"account","nameLocation":"1712:7:16","nodeType":"VariableDeclaration","scope":3041,"src":"1704:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3024,"name":"address","nodeType":"ElementaryTypeName","src":"1704:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3027,"mutability":"mutable","name":"where","nameLocation":"1729:5:16","nodeType":"VariableDeclaration","scope":3041,"src":"1721:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3026,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1685:50:16"},"returnParameters":{"id":3031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3041,"src":"1759:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3029,"name":"bool","nodeType":"ElementaryTypeName","src":"1759:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1758:6:16"},"scope":3042,"src":"1665:176:16","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3043,"src":"727:1116:16","usedErrors":[5],"usedEvents":[]}],"src":"46:1798:16"},"id":16},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[3290],"IERC20Metadata":[3316],"IERC4626":[3212]},"id":3213,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3044,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:17"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":3046,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3213,"sourceUnit":3291,"src":"133:49:17","symbolAliases":[{"foreign":{"id":3045,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"141:6:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":3048,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3213,"sourceUnit":3317,"src":"183:76:17","symbolAliases":[{"foreign":{"id":3047,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3316,"src":"191:14:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3050,"name":"IERC20","nameLocations":["420:6:17"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"420:6:17"},"id":3051,"nodeType":"InheritanceSpecifier","src":"420:6:17"},{"baseName":{"id":3052,"name":"IERC20Metadata","nameLocations":["428:14:17"],"nodeType":"IdentifierPath","referencedDeclaration":3316,"src":"428:14:17"},"id":3053,"nodeType":"InheritanceSpecifier","src":"428:14:17"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":3049,"nodeType":"StructuredDocumentation","src":"261:136:17","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":3212,"linearizedBaseContracts":[3212,3316,3290],"name":"IERC4626","nameLocation":"408:8:17","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":3063,"name":"Deposit","nameLocation":"455:7:17","nodeType":"EventDefinition","parameters":{"id":3062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3055,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:17","nodeType":"VariableDeclaration","scope":3063,"src":"463:22:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3054,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3057,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:17","nodeType":"VariableDeclaration","scope":3063,"src":"487:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3056,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3059,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:17","nodeType":"VariableDeclaration","scope":3063,"src":"510:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3058,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3061,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:17","nodeType":"VariableDeclaration","scope":3063,"src":"526:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3060,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:17"},"src":"449:93:17"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":3075,"name":"Withdraw","nameLocation":"554:8:17","nodeType":"EventDefinition","parameters":{"id":3074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3065,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:17","nodeType":"VariableDeclaration","scope":3075,"src":"572:22:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3064,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3067,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:17","nodeType":"VariableDeclaration","scope":3075,"src":"604:24:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3066,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3069,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:17","nodeType":"VariableDeclaration","scope":3075,"src":"638:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3068,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3071,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:17","nodeType":"VariableDeclaration","scope":3075,"src":"669:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3070,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3073,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:17","nodeType":"VariableDeclaration","scope":3075,"src":"693:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3072,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:17"},"src":"548:166:17"},{"documentation":{"id":3076,"nodeType":"StructuredDocumentation","src":"720:207:17","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":3081,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:17","nodeType":"FunctionDefinition","parameters":{"id":3077,"nodeType":"ParameterList","parameters":[],"src":"946:2:17"},"returnParameters":{"id":3080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3079,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:17","nodeType":"VariableDeclaration","scope":3081,"src":"972:25:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3078,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:17"},"scope":3212,"src":"932:67:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3082,"nodeType":"StructuredDocumentation","src":"1005:286:17","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":3087,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:17","nodeType":"FunctionDefinition","parameters":{"id":3083,"nodeType":"ParameterList","parameters":[],"src":"1316:2:17"},"returnParameters":{"id":3086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3085,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:17","nodeType":"VariableDeclaration","scope":3087,"src":"1342:26:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3084,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:17"},"scope":3212,"src":"1296:74:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3088,"nodeType":"StructuredDocumentation","src":"1376:720:17","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":3095,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:17","nodeType":"FunctionDefinition","parameters":{"id":3091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3090,"mutability":"mutable","name":"assets","nameLocation":"2134:6:17","nodeType":"VariableDeclaration","scope":3095,"src":"2126:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3089,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:17"},"returnParameters":{"id":3094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3093,"mutability":"mutable","name":"shares","nameLocation":"2173:6:17","nodeType":"VariableDeclaration","scope":3095,"src":"2165:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3092,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:17"},"scope":3212,"src":"2101:80:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3096,"nodeType":"StructuredDocumentation","src":"2187:720:17","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":3103,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:17","nodeType":"FunctionDefinition","parameters":{"id":3099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3098,"mutability":"mutable","name":"shares","nameLocation":"2945:6:17","nodeType":"VariableDeclaration","scope":3103,"src":"2937:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3097,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:17"},"returnParameters":{"id":3102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3101,"mutability":"mutable","name":"assets","nameLocation":"2984:6:17","nodeType":"VariableDeclaration","scope":3103,"src":"2976:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3100,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:17"},"scope":3212,"src":"2912:80:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3104,"nodeType":"StructuredDocumentation","src":"2998:386:17","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":3111,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:17","nodeType":"FunctionDefinition","parameters":{"id":3107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3106,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:17","nodeType":"VariableDeclaration","scope":3111,"src":"3409:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3105,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:17"},"returnParameters":{"id":3110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3109,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:17","nodeType":"VariableDeclaration","scope":3111,"src":"3450:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3108,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:17"},"scope":3212,"src":"3389:80:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3112,"nodeType":"StructuredDocumentation","src":"3475:1012:17","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":3119,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:17","nodeType":"FunctionDefinition","parameters":{"id":3115,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3114,"mutability":"mutable","name":"assets","nameLocation":"4524:6:17","nodeType":"VariableDeclaration","scope":3119,"src":"4516:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3113,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:17"},"returnParameters":{"id":3118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3117,"mutability":"mutable","name":"shares","nameLocation":"4563:6:17","nodeType":"VariableDeclaration","scope":3119,"src":"4555:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3116,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:17"},"scope":3212,"src":"4492:79:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3120,"nodeType":"StructuredDocumentation","src":"4577:651:17","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":3129,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:17","nodeType":"FunctionDefinition","parameters":{"id":3125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3122,"mutability":"mutable","name":"assets","nameLocation":"5258:6:17","nodeType":"VariableDeclaration","scope":3129,"src":"5250:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3121,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3124,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:17","nodeType":"VariableDeclaration","scope":3129,"src":"5266:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3123,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:17"},"returnParameters":{"id":3128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3127,"mutability":"mutable","name":"shares","nameLocation":"5310:6:17","nodeType":"VariableDeclaration","scope":3129,"src":"5302:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3126,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:17"},"scope":3212,"src":"5233:85:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3130,"nodeType":"StructuredDocumentation","src":"5324:341:17","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":3137,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:17","nodeType":"FunctionDefinition","parameters":{"id":3133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3132,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:17","nodeType":"VariableDeclaration","scope":3137,"src":"5687:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3131,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:17"},"returnParameters":{"id":3136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3135,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:17","nodeType":"VariableDeclaration","scope":3137,"src":"5728:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3134,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:17"},"scope":3212,"src":"5670:77:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3138,"nodeType":"StructuredDocumentation","src":"5753:984:17","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":3145,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:17","nodeType":"FunctionDefinition","parameters":{"id":3141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3140,"mutability":"mutable","name":"shares","nameLocation":"6771:6:17","nodeType":"VariableDeclaration","scope":3145,"src":"6763:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3139,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:17"},"returnParameters":{"id":3144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3143,"mutability":"mutable","name":"assets","nameLocation":"6810:6:17","nodeType":"VariableDeclaration","scope":3145,"src":"6802:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3142,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:17"},"scope":3212,"src":"6742:76:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3146,"nodeType":"StructuredDocumentation","src":"6824:642:17","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":3155,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:17","nodeType":"FunctionDefinition","parameters":{"id":3151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3148,"mutability":"mutable","name":"shares","nameLocation":"7493:6:17","nodeType":"VariableDeclaration","scope":3155,"src":"7485:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3147,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3150,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:17","nodeType":"VariableDeclaration","scope":3155,"src":"7501:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3149,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:17"},"returnParameters":{"id":3154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3153,"mutability":"mutable","name":"assets","nameLocation":"7545:6:17","nodeType":"VariableDeclaration","scope":3155,"src":"7537:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3152,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:17"},"scope":3212,"src":"7471:82:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3156,"nodeType":"StructuredDocumentation","src":"7559:293:17","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":3163,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:17","nodeType":"FunctionDefinition","parameters":{"id":3159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3158,"mutability":"mutable","name":"owner","nameLocation":"7886:5:17","nodeType":"VariableDeclaration","scope":3163,"src":"7878:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3157,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:17"},"returnParameters":{"id":3162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3161,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:17","nodeType":"VariableDeclaration","scope":3163,"src":"7916:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3160,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:17"},"scope":3212,"src":"7857:78:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3164,"nodeType":"StructuredDocumentation","src":"7941:1034:17","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":3171,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:17","nodeType":"FunctionDefinition","parameters":{"id":3167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3166,"mutability":"mutable","name":"assets","nameLocation":"9013:6:17","nodeType":"VariableDeclaration","scope":3171,"src":"9005:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3165,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:17"},"returnParameters":{"id":3170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3169,"mutability":"mutable","name":"shares","nameLocation":"9052:6:17","nodeType":"VariableDeclaration","scope":3171,"src":"9044:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3168,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:17"},"scope":3212,"src":"8980:80:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3172,"nodeType":"StructuredDocumentation","src":"9066:670:17","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":3183,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:17","nodeType":"FunctionDefinition","parameters":{"id":3179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3174,"mutability":"mutable","name":"assets","nameLocation":"9767:6:17","nodeType":"VariableDeclaration","scope":3183,"src":"9759:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3173,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3176,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:17","nodeType":"VariableDeclaration","scope":3183,"src":"9775:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3175,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3178,"mutability":"mutable","name":"owner","nameLocation":"9801:5:17","nodeType":"VariableDeclaration","scope":3183,"src":"9793:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3177,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:17"},"returnParameters":{"id":3182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3181,"mutability":"mutable","name":"shares","nameLocation":"9834:6:17","nodeType":"VariableDeclaration","scope":3183,"src":"9826:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3180,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:17"},"scope":3212,"src":"9741:101:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3184,"nodeType":"StructuredDocumentation","src":"9848:381:17","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":3191,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:17","nodeType":"FunctionDefinition","parameters":{"id":3187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3186,"mutability":"mutable","name":"owner","nameLocation":"10261:5:17","nodeType":"VariableDeclaration","scope":3191,"src":"10253:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3185,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:17"},"returnParameters":{"id":3190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3189,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:17","nodeType":"VariableDeclaration","scope":3191,"src":"10291:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3188,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:17"},"scope":3212,"src":"10234:76:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3192,"nodeType":"StructuredDocumentation","src":"10316:1010:17","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":3199,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:17","nodeType":"FunctionDefinition","parameters":{"id":3195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3194,"mutability":"mutable","name":"shares","nameLocation":"11362:6:17","nodeType":"VariableDeclaration","scope":3199,"src":"11354:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3193,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:17"},"returnParameters":{"id":3198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3197,"mutability":"mutable","name":"assets","nameLocation":"11401:6:17","nodeType":"VariableDeclaration","scope":3199,"src":"11393:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3196,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:17"},"scope":3212,"src":"11331:78:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3200,"nodeType":"StructuredDocumentation","src":"11415:661:17","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":3211,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:17","nodeType":"FunctionDefinition","parameters":{"id":3207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3202,"mutability":"mutable","name":"shares","nameLocation":"12105:6:17","nodeType":"VariableDeclaration","scope":3211,"src":"12097:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3201,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3204,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:17","nodeType":"VariableDeclaration","scope":3211,"src":"12113:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3203,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3206,"mutability":"mutable","name":"owner","nameLocation":"12139:5:17","nodeType":"VariableDeclaration","scope":3211,"src":"12131:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3205,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:17"},"returnParameters":{"id":3210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3209,"mutability":"mutable","name":"assets","nameLocation":"12172:6:17","nodeType":"VariableDeclaration","scope":3211,"src":"12164:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3208,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:17"},"scope":3212,"src":"12081:99:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3213,"src":"398:11784:17","usedErrors":[],"usedEvents":[3063,3075,3224,3233]}],"src":"107:12076:17"},"id":17},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[3290]},"id":3291,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3214,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:18"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":3215,"nodeType":"StructuredDocumentation","src":"132:70:18","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":3290,"linearizedBaseContracts":[3290],"name":"IERC20","nameLocation":"213:6:18","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3216,"nodeType":"StructuredDocumentation","src":"226:158:18","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":3224,"name":"Transfer","nameLocation":"395:8:18","nodeType":"EventDefinition","parameters":{"id":3223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3218,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:18","nodeType":"VariableDeclaration","scope":3224,"src":"404:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3217,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3220,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:18","nodeType":"VariableDeclaration","scope":3224,"src":"426:18:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3219,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3222,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:18","nodeType":"VariableDeclaration","scope":3224,"src":"446:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3221,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:18"},"src":"389:72:18"},{"anonymous":false,"documentation":{"id":3225,"nodeType":"StructuredDocumentation","src":"467:148:18","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":3233,"name":"Approval","nameLocation":"626:8:18","nodeType":"EventDefinition","parameters":{"id":3232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3227,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:18","nodeType":"VariableDeclaration","scope":3233,"src":"635:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3226,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3229,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:18","nodeType":"VariableDeclaration","scope":3233,"src":"658:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3228,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3231,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:18","nodeType":"VariableDeclaration","scope":3233,"src":"683:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3230,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:18"},"src":"620:78:18"},{"documentation":{"id":3234,"nodeType":"StructuredDocumentation","src":"704:65:18","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":3239,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:18","nodeType":"FunctionDefinition","parameters":{"id":3235,"nodeType":"ParameterList","parameters":[],"src":"794:2:18"},"returnParameters":{"id":3238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3237,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3239,"src":"820:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3236,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:18"},"scope":3290,"src":"774:55:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3240,"nodeType":"StructuredDocumentation","src":"835:71:18","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":3247,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:18","nodeType":"FunctionDefinition","parameters":{"id":3243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3242,"mutability":"mutable","name":"account","nameLocation":"938:7:18","nodeType":"VariableDeclaration","scope":3247,"src":"930:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3241,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:18"},"returnParameters":{"id":3246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3245,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3247,"src":"970:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3244,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:18"},"scope":3290,"src":"911:68:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3248,"nodeType":"StructuredDocumentation","src":"985:213:18","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":3257,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:18","nodeType":"FunctionDefinition","parameters":{"id":3253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3250,"mutability":"mutable","name":"to","nameLocation":"1229:2:18","nodeType":"VariableDeclaration","scope":3257,"src":"1221:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3249,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3252,"mutability":"mutable","name":"value","nameLocation":"1241:5:18","nodeType":"VariableDeclaration","scope":3257,"src":"1233:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3251,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:18"},"returnParameters":{"id":3256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3255,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3257,"src":"1266:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3254,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:18"},"scope":3290,"src":"1203:69:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3258,"nodeType":"StructuredDocumentation","src":"1278:264:18","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":3267,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:18","nodeType":"FunctionDefinition","parameters":{"id":3263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3260,"mutability":"mutable","name":"owner","nameLocation":"1574:5:18","nodeType":"VariableDeclaration","scope":3267,"src":"1566:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3259,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3262,"mutability":"mutable","name":"spender","nameLocation":"1589:7:18","nodeType":"VariableDeclaration","scope":3267,"src":"1581:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3261,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:18"},"returnParameters":{"id":3266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3265,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3267,"src":"1621:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3264,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:18"},"scope":3290,"src":"1547:83:18","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3268,"nodeType":"StructuredDocumentation","src":"1636:667:18","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":3277,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:18","nodeType":"FunctionDefinition","parameters":{"id":3273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3270,"mutability":"mutable","name":"spender","nameLocation":"2333:7:18","nodeType":"VariableDeclaration","scope":3277,"src":"2325:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3269,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3272,"mutability":"mutable","name":"value","nameLocation":"2350:5:18","nodeType":"VariableDeclaration","scope":3277,"src":"2342:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3271,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:18"},"returnParameters":{"id":3276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3277,"src":"2375:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3274,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:18"},"scope":3290,"src":"2308:73:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3278,"nodeType":"StructuredDocumentation","src":"2387:297:18","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":3289,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:18","nodeType":"FunctionDefinition","parameters":{"id":3285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3280,"mutability":"mutable","name":"from","nameLocation":"2719:4:18","nodeType":"VariableDeclaration","scope":3289,"src":"2711:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3279,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3282,"mutability":"mutable","name":"to","nameLocation":"2733:2:18","nodeType":"VariableDeclaration","scope":3289,"src":"2725:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3281,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3284,"mutability":"mutable","name":"value","nameLocation":"2745:5:18","nodeType":"VariableDeclaration","scope":3289,"src":"2737:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3283,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:18"},"returnParameters":{"id":3288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3287,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3289,"src":"2770:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3286,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:18"},"scope":3290,"src":"2689:87:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3291,"src":"203:2575:18","usedErrors":[],"usedEvents":[3224,3233]}],"src":"106:2673:18"},"id":18},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[3290],"IERC20Metadata":[3316]},"id":3317,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3292,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:19"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":3294,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3317,"sourceUnit":3291,"src":"151:37:19","symbolAliases":[{"foreign":{"id":3293,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3290,"src":"159:6:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3296,"name":"IERC20","nameLocations":["305:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":3290,"src":"305:6:19"},"id":3297,"nodeType":"InheritanceSpecifier","src":"305:6:19"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":3295,"nodeType":"StructuredDocumentation","src":"190:86:19","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":3316,"linearizedBaseContracts":[3316,3290],"name":"IERC20Metadata","nameLocation":"287:14:19","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3298,"nodeType":"StructuredDocumentation","src":"318:54:19","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":3303,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:19","nodeType":"FunctionDefinition","parameters":{"id":3299,"nodeType":"ParameterList","parameters":[],"src":"390:2:19"},"returnParameters":{"id":3302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3301,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3303,"src":"416:13:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3300,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:19"},"scope":3316,"src":"377:54:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3304,"nodeType":"StructuredDocumentation","src":"437:56:19","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":3309,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:19","nodeType":"FunctionDefinition","parameters":{"id":3305,"nodeType":"ParameterList","parameters":[],"src":"513:2:19"},"returnParameters":{"id":3308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3309,"src":"539:13:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":3306,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:19","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:19"},"scope":3316,"src":"498:56:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3310,"nodeType":"StructuredDocumentation","src":"560:65:19","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":3315,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:19","nodeType":"FunctionDefinition","parameters":{"id":3311,"nodeType":"ParameterList","parameters":[],"src":"647:2:19"},"returnParameters":{"id":3314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3313,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3315,"src":"673:5:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":3312,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:19","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:19"},"scope":3316,"src":"630:50:19","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3317,"src":"277:405:19","usedErrors":[],"usedEvents":[3224,3233]}],"src":"125:558:19"},"id":19},"contracts/BalancerContractRegistryInitializer.sol":{"ast":{"absolutePath":"contracts/BalancerContractRegistryInitializer.sol","exportedSymbols":{"BalancerContractRegistryInitializer":[3648],"ContractType":[33],"IAuthentication":[14],"IBalancerContractRegistry":[202],"IBasicAuthorizer":[3681],"IVault":[763],"InputHelpers":[2936],"SingletonAuthentication":[3042]},"id":3649,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3318,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":3320,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":15,"src":"72:116:20","symbolAliases":[{"foreign":{"id":3319,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"81:15:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":3323,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":203,"src":"189:152:20","symbolAliases":[{"foreign":{"id":3321,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"202:25:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":3322,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"233:12:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":3325,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":764,"src":"342:81:20","symbolAliases":[{"foreign":{"id":3324,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"351:6:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":3327,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":3043,"src":"425:104:20","symbolAliases":[{"foreign":{"id":3326,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"434:23:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":3329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":2937,"src":"530:99:20","symbolAliases":[{"foreign":{"id":3328,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2936,"src":"539:12:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/IBasicAuthorizer.sol","file":"./IBasicAuthorizer.sol","id":3331,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3649,"sourceUnit":3682,"src":"631:58:20","symbolAliases":[{"foreign":{"id":3330,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3681,"src":"640:16:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BalancerContractRegistryInitializer","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":3648,"linearizedBaseContracts":[3648],"name":"BalancerContractRegistryInitializer","nameLocation":"761:35:20","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"2623a2d0","id":3334,"mutability":"immutable","name":"balancerContractRegistry","nameLocation":"846:24:20","nodeType":"VariableDeclaration","scope":3648,"src":"803:67:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":3333,"nodeType":"UserDefinedTypeName","pathNode":{"id":3332,"name":"IBalancerContractRegistry","nameLocations":["803:25:20"],"nodeType":"IdentifierPath","referencedDeclaration":202,"src":"803:25:20"},"referencedDeclaration":202,"src":"803:25:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"visibility":"public"},{"constant":false,"id":3337,"mutability":"immutable","name":"_authorizer","nameLocation":"976:11:20","nodeType":"VariableDeclaration","scope":3648,"src":"940:47:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"},"typeName":{"id":3336,"nodeType":"UserDefinedTypeName","pathNode":{"id":3335,"name":"IBasicAuthorizer","nameLocations":["940:16:20"],"nodeType":"IdentifierPath","referencedDeclaration":3681,"src":"940:16:20"},"referencedDeclaration":3681,"src":"940:16:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"visibility":"internal"},{"constant":false,"id":3339,"mutability":"mutable","name":"_initialized","nameLocation":"1054:12:20","nodeType":"VariableDeclaration","scope":3648,"src":"1041:25:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3338,"name":"bool","nodeType":"ElementaryTypeName","src":"1041:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"id":3342,"mutability":"mutable","name":"routerNames","nameLocation":"1090:11:20","nodeType":"VariableDeclaration","scope":3648,"src":"1073:28:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":3340,"name":"string","nodeType":"ElementaryTypeName","src":"1073:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3341,"nodeType":"ArrayTypeName","src":"1073:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":3345,"mutability":"mutable","name":"routerAddresses","nameLocation":"1125:15:20","nodeType":"VariableDeclaration","scope":3648,"src":"1107:33:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":3343,"name":"address","nodeType":"ElementaryTypeName","src":"1107:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3344,"nodeType":"ArrayTypeName","src":"1107:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":3348,"mutability":"mutable","name":"poolFactoryNames","nameLocation":"1164:16:20","nodeType":"VariableDeclaration","scope":3648,"src":"1147:33:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":3346,"name":"string","nodeType":"ElementaryTypeName","src":"1147:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3347,"nodeType":"ArrayTypeName","src":"1147:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":3351,"mutability":"mutable","name":"poolFactoryAddresses","nameLocation":"1204:20:20","nodeType":"VariableDeclaration","scope":3648,"src":"1186:38:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":3349,"name":"address","nodeType":"ElementaryTypeName","src":"1186:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3350,"nodeType":"ArrayTypeName","src":"1186:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":3354,"mutability":"mutable","name":"aliasNames","nameLocation":"1248:10:20","nodeType":"VariableDeclaration","scope":3648,"src":"1231:27:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":3352,"name":"string","nodeType":"ElementaryTypeName","src":"1231:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3353,"nodeType":"ArrayTypeName","src":"1231:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":3357,"mutability":"mutable","name":"aliasAddresses","nameLocation":"1282:14:20","nodeType":"VariableDeclaration","scope":3648,"src":"1264:32:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":3355,"name":"address","nodeType":"ElementaryTypeName","src":"1264:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3356,"nodeType":"ArrayTypeName","src":"1264:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"documentation":{"id":3358,"nodeType":"StructuredDocumentation","src":"1303:53:20","text":"@notice The initialization can only be done once."},"errorSelector":"0dc149f0","id":3360,"name":"AlreadyInitialized","nameLocation":"1367:18:20","nodeType":"ErrorDefinition","parameters":{"id":3359,"nodeType":"ParameterList","parameters":[],"src":"1385:2:20"},"src":"1361:27:20"},{"documentation":{"id":3361,"nodeType":"StructuredDocumentation","src":"1394:103:20","text":"@notice The Vault passed in as a sanity check doesn't match the Vault associated with the registry."},"errorSelector":"c1faacc5","id":3363,"name":"VaultMismatch","nameLocation":"1508:13:20","nodeType":"ErrorDefinition","parameters":{"id":3362,"nodeType":"ParameterList","parameters":[],"src":"1521:2:20"},"src":"1502:22:20"},{"body":{"id":3476,"nodeType":"Block","src":"1882:958:20","statements":[{"expression":{"arguments":[{"expression":{"id":3393,"name":"_routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3372,"src":"1928:12:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":3394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1941:6:20","memberName":"length","nodeType":"MemberAccess","src":"1928:19:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3395,"name":"_routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3375,"src":"1949:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1966:6:20","memberName":"length","nodeType":"MemberAccess","src":"1949:23:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3390,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2936,"src":"1892:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2936_$","typeString":"type(library InputHelpers)"}},"id":3392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1905:22:20","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2669,"src":"1892:35:20","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":3397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1892:81:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3398,"nodeType":"ExpressionStatement","src":"1892:81:20"},{"expression":{"arguments":[{"expression":{"id":3402,"name":"_poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3378,"src":"2019:17:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":3403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2037:6:20","memberName":"length","nodeType":"MemberAccess","src":"2019:24:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3404,"name":"_poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3381,"src":"2045:21:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2067:6:20","memberName":"length","nodeType":"MemberAccess","src":"2045:28:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3399,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2936,"src":"1983:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2936_$","typeString":"type(library InputHelpers)"}},"id":3401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1996:22:20","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2669,"src":"1983:35:20","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":3406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1983:91:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3407,"nodeType":"ExpressionStatement","src":"1983:91:20"},{"expression":{"arguments":[{"expression":{"id":3411,"name":"_aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3384,"src":"2120:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"id":3412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2132:6:20","memberName":"length","nodeType":"MemberAccess","src":"2120:18:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3413,"name":"_aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"2140:15:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":3414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2156:6:20","memberName":"length","nodeType":"MemberAccess","src":"2140:22:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3408,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2936,"src":"2084:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$2936_$","typeString":"type(library InputHelpers)"}},"id":3410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2097:22:20","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2669,"src":"2084:35:20","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2084:79:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3416,"nodeType":"ExpressionStatement","src":"2084:79:20"},{"assignments":[3419],"declarations":[{"constant":false,"id":3419,"mutability":"mutable","name":"registryVault","nameLocation":"2270:13:20","nodeType":"VariableDeclaration","scope":3476,"src":"2263:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":3418,"nodeType":"UserDefinedTypeName","pathNode":{"id":3417,"name":"IVault","nameLocations":["2263:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"2263:6:20"},"referencedDeclaration":763,"src":"2263:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"}],"id":3428,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":3423,"name":"_balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"2318:25:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}],"id":3422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2310:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3421,"name":"address","nodeType":"ElementaryTypeName","src":"2310:7:20","typeDescriptions":{}}},"id":3424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2310:34:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3420,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"2286:23:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SingletonAuthentication_$3042_$","typeString":"type(contract SingletonAuthentication)"}},"id":3425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2286:59:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$3042","typeString":"contract SingletonAuthentication"}},"id":3426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2346:8:20","memberName":"getVault","nodeType":"MemberAccess","referencedDeclaration":2986,"src":"2286:68:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$763_$","typeString":"function () view external returns (contract IVault)"}},"id":3427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2286:70:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"nodeType":"VariableDeclarationStatement","src":"2263:93:20"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3429,"name":"registryVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3419,"src":"2370:13:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3430,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"2387:5:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"src":"2370:22:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3436,"nodeType":"IfStatement","src":"2366:75:20","trueBody":{"id":3435,"nodeType":"Block","src":"2394:47:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3432,"name":"VaultMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3363,"src":"2415:13:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2415:15:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3434,"nodeType":"RevertStatement","src":"2408:22:20"}]}},{"expression":{"id":3439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3437,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"2451:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3438,"name":"_balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3369,"src":"2478:25:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"src":"2451:52:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"id":3440,"nodeType":"ExpressionStatement","src":"2451:52:20"},{"expression":{"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3441,"name":"routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3342,"src":"2514:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3442,"name":"_routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3372,"src":"2528:12:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2514:26:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3444,"nodeType":"ExpressionStatement","src":"2514:26:20"},{"expression":{"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3445,"name":"routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"2550:15:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3446,"name":"_routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3375,"src":"2568:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2550:34:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3448,"nodeType":"ExpressionStatement","src":"2550:34:20"},{"expression":{"id":3451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3449,"name":"poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"2594:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3450,"name":"_poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3378,"src":"2613:17:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2594:36:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3452,"nodeType":"ExpressionStatement","src":"2594:36:20"},{"expression":{"id":3455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3453,"name":"poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3351,"src":"2640:20:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3454,"name":"_poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3381,"src":"2663:21:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2640:44:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3456,"nodeType":"ExpressionStatement","src":"2640:44:20"},{"expression":{"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3457,"name":"aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"2694:10:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3458,"name":"_aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3384,"src":"2707:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2694:24:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3460,"nodeType":"ExpressionStatement","src":"2694:24:20"},{"expression":{"id":3463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3461,"name":"aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"2728:14:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3462,"name":"_aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"2745:15:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2728:32:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3464,"nodeType":"ExpressionStatement","src":"2728:32:20"},{"expression":{"id":3474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3465,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"2771:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3469,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3366,"src":"2810:5:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"id":3470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2816:13:20","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2077,"src":"2810:19:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$218_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":3471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2810:21:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAuthorizer_$218","typeString":"contract IAuthorizer"}],"id":3468,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2802:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3467,"name":"address","nodeType":"ElementaryTypeName","src":"2802:7:20","typeDescriptions":{}}},"id":3472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2802:30:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3466,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3681,"src":"2785:16:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasicAuthorizer_$3681_$","typeString":"type(contract IBasicAuthorizer)"}},"id":3473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2785:48:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"src":"2771:62:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3475,"nodeType":"ExpressionStatement","src":"2771:62:20"}]},"id":3477,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3366,"mutability":"mutable","name":"vault","nameLocation":"1558:5:20","nodeType":"VariableDeclaration","scope":3477,"src":"1551:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"},"typeName":{"id":3365,"nodeType":"UserDefinedTypeName","pathNode":{"id":3364,"name":"IVault","nameLocations":["1551:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":763,"src":"1551:6:20"},"referencedDeclaration":763,"src":"1551:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$763","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":3369,"mutability":"mutable","name":"_balancerContractRegistry","nameLocation":"1599:25:20","nodeType":"VariableDeclaration","scope":3477,"src":"1573:51:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":3368,"nodeType":"UserDefinedTypeName","pathNode":{"id":3367,"name":"IBalancerContractRegistry","nameLocations":["1573:25:20"],"nodeType":"IdentifierPath","referencedDeclaration":202,"src":"1573:25:20"},"referencedDeclaration":202,"src":"1573:25:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"},{"constant":false,"id":3372,"mutability":"mutable","name":"_routerNames","nameLocation":"1650:12:20","nodeType":"VariableDeclaration","scope":3477,"src":"1634:28:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":3370,"name":"string","nodeType":"ElementaryTypeName","src":"1634:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3371,"nodeType":"ArrayTypeName","src":"1634:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":3375,"mutability":"mutable","name":"_routerAddresses","nameLocation":"1689:16:20","nodeType":"VariableDeclaration","scope":3477,"src":"1672:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3373,"name":"address","nodeType":"ElementaryTypeName","src":"1672:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3374,"nodeType":"ArrayTypeName","src":"1672:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3378,"mutability":"mutable","name":"_poolFactoryNames","nameLocation":"1731:17:20","nodeType":"VariableDeclaration","scope":3477,"src":"1715:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":3376,"name":"string","nodeType":"ElementaryTypeName","src":"1715:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3377,"nodeType":"ArrayTypeName","src":"1715:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":3381,"mutability":"mutable","name":"_poolFactoryAddresses","nameLocation":"1775:21:20","nodeType":"VariableDeclaration","scope":3477,"src":"1758:38:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3379,"name":"address","nodeType":"ElementaryTypeName","src":"1758:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3380,"nodeType":"ArrayTypeName","src":"1758:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":3384,"mutability":"mutable","name":"_aliasNames","nameLocation":"1822:11:20","nodeType":"VariableDeclaration","scope":3477,"src":"1806:27:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":3382,"name":"string","nodeType":"ElementaryTypeName","src":"1806:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":3383,"nodeType":"ArrayTypeName","src":"1806:8:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":3387,"mutability":"mutable","name":"_aliasAddresses","nameLocation":"1860:15:20","nodeType":"VariableDeclaration","scope":3477,"src":"1843:32:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3385,"name":"address","nodeType":"ElementaryTypeName","src":"1843:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3386,"nodeType":"ArrayTypeName","src":"1843:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1541:340:20"},"returnParameters":{"id":3389,"nodeType":"ParameterList","parameters":[],"src":"1882:0:20"},"scope":3648,"src":"1530:1310:20","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3646,"nodeType":"Block","src":"2901:1726:20","statements":[{"condition":{"id":3480,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3339,"src":"2974:12:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3485,"nodeType":"IfStatement","src":"2970:70:20","trueBody":{"id":3484,"nodeType":"Block","src":"2988:52:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3481,"name":"AlreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3360,"src":"3009:18:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3009:20:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3483,"nodeType":"RevertStatement","src":"3002:27:20"}]}},{"expression":{"id":3488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3486,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3339,"src":"3050:12:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3065:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3050:19:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3489,"nodeType":"ExpressionStatement","src":"3050:19:20"},{"assignments":[3491],"declarations":[{"constant":false,"id":3491,"mutability":"mutable","name":"registerContractRole","nameLocation":"3156:20:20","nodeType":"VariableDeclaration","scope":3646,"src":"3148:28:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3490,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3148:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3503,"initialValue":{"arguments":[{"expression":{"expression":{"id":3499,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"3255:25:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBalancerContractRegistry_$202_$","typeString":"type(contract IBalancerContractRegistry)"}},"id":3500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3281:24:20","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":140,"src":"3255:50:20","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_enum$_ContractType_$33_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function IBalancerContractRegistry.registerBalancerContract(enum ContractType,string memory,address)"}},"id":3501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3306:8:20","memberName":"selector","nodeType":"MemberAccess","src":"3255:59:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":3495,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"3203:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}],"id":3494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3195:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3493,"name":"address","nodeType":"ElementaryTypeName","src":"3195:7:20","typeDescriptions":{}}},"id":3496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3195:33:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3492,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"3179:15:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$14_$","typeString":"type(contract IAuthentication)"}},"id":3497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3179:50:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$14","typeString":"contract IAuthentication"}},"id":3498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3230:11:20","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":13,"src":"3179:62:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":3502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3179:145:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3148:176:20"},{"assignments":[3505],"declarations":[{"constant":false,"id":3505,"mutability":"mutable","name":"addAliasRole","nameLocation":"3342:12:20","nodeType":"VariableDeclaration","scope":3646,"src":"3334:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3504,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3334:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3517,"initialValue":{"arguments":[{"expression":{"expression":{"id":3513,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":202,"src":"3433:25:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBalancerContractRegistry_$202_$","typeString":"type(contract IBalancerContractRegistry)"}},"id":3514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3459:32:20","memberName":"addOrUpdateBalancerContractAlias","nodeType":"MemberAccess","referencedDeclaration":160,"src":"3433:58:20","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function IBalancerContractRegistry.addOrUpdateBalancerContractAlias(string memory,address)"}},"id":3515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3492:8:20","memberName":"selector","nodeType":"MemberAccess","src":"3433:67:20","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":3509,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"3381:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}],"id":3508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3373:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3507,"name":"address","nodeType":"ElementaryTypeName","src":"3373:7:20","typeDescriptions":{}}},"id":3510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3373:33:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":3506,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14,"src":"3357:15:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$14_$","typeString":"type(contract IAuthentication)"}},"id":3511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3357:50:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$14","typeString":"contract IAuthentication"}},"id":3512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3408:11:20","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":13,"src":"3357:62:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":3516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3357:153:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3334:176:20"},{"expression":{"arguments":[{"id":3521,"name":"registerContractRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3491,"src":"3543:20:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3524,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3573:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3565:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3522,"name":"address","nodeType":"ElementaryTypeName","src":"3565:7:20","typeDescriptions":{}}},"id":3525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3565:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3518,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"3521:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3533:9:20","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":3666,"src":"3521:21:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3521:58:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3527,"nodeType":"ExpressionStatement","src":"3521:58:20"},{"expression":{"arguments":[{"id":3531,"name":"addAliasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"3611:12:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3534,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3633:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3625:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3532,"name":"address","nodeType":"ElementaryTypeName","src":"3625:7:20","typeDescriptions":{}}},"id":3535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3625:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3528,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"3589:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3601:9:20","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":3666,"src":"3589:21:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3589:50:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3537,"nodeType":"ExpressionStatement","src":"3589:50:20"},{"body":{"id":3562,"nodeType":"Block","src":"3723:131:20","statements":[{"expression":{"arguments":[{"expression":{"id":3552,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"3787:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$33_$","typeString":"type(enum ContractType)"}},"id":3553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3800:6:20","memberName":"ROUTER","nodeType":"MemberAccess","referencedDeclaration":30,"src":"3787:19:20","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},{"baseExpression":{"id":3554,"name":"routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3342,"src":"3808:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3556,"indexExpression":{"id":3555,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"3820:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3808:14:20","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":3557,"name":"routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"3824:15:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3559,"indexExpression":{"id":3558,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"3840:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3824:18:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3549,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"3737:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"id":3551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3762:24:20","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":140,"src":"3737:49:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_enum$_ContractType_$33_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address) external"}},"id":3560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3737:106:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3561,"nodeType":"ExpressionStatement","src":"3737:106:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3542,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"3694:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3543,"name":"routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3342,"src":"3698:11:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3710:6:20","memberName":"length","nodeType":"MemberAccess","src":"3698:18:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3694:22:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3563,"initializationExpression":{"assignments":[3539],"declarations":[{"constant":false,"id":3539,"mutability":"mutable","name":"i","nameLocation":"3687:1:20","nodeType":"VariableDeclaration","scope":3563,"src":"3679:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3538,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3541,"initialValue":{"hexValue":"30","id":3540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3691:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3679:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3718:3:20","subExpression":{"id":3546,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3539,"src":"3720:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3548,"nodeType":"ExpressionStatement","src":"3718:3:20"},"nodeType":"ForStatement","src":"3674:180:20"},{"body":{"id":3588,"nodeType":"Block","src":"3949:209:20","statements":[{"expression":{"arguments":[{"expression":{"id":3578,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"4030:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$33_$","typeString":"type(enum ContractType)"}},"id":3579,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4043:12:20","memberName":"POOL_FACTORY","nodeType":"MemberAccess","referencedDeclaration":29,"src":"4030:25:20","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"}},{"baseExpression":{"id":3580,"name":"poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"4073:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3582,"indexExpression":{"id":3581,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"4090:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4073:19:20","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":3583,"name":"poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3351,"src":"4110:20:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3585,"indexExpression":{"id":3584,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"4131:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4110:23:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$33","typeString":"enum ContractType"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3575,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"3963:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"id":3577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3988:24:20","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":140,"src":"3963:49:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_enum$_ContractType_$33_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address) external"}},"id":3586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3963:184:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3587,"nodeType":"ExpressionStatement","src":"3963:184:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3568,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"3915:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3569,"name":"poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3348,"src":"3919:16:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3936:6:20","memberName":"length","nodeType":"MemberAccess","src":"3919:23:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3915:27:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3589,"initializationExpression":{"assignments":[3565],"declarations":[{"constant":false,"id":3565,"mutability":"mutable","name":"i","nameLocation":"3908:1:20","nodeType":"VariableDeclaration","scope":3589,"src":"3900:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3564,"name":"uint256","nodeType":"ElementaryTypeName","src":"3900:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3567,"initialValue":{"hexValue":"30","id":3566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3912:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3900:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3944:3:20","subExpression":{"id":3572,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"3946:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3574,"nodeType":"ExpressionStatement","src":"3944:3:20"},"nodeType":"ForStatement","src":"3895:263:20"},{"body":{"id":3612,"nodeType":"Block","src":"4255:116:20","statements":[{"expression":{"arguments":[{"baseExpression":{"id":3604,"name":"aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"4327:10:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3606,"indexExpression":{"id":3605,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"4338:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4327:13:20","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":3607,"name":"aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"4342:14:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":3609,"indexExpression":{"id":3608,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"4357:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4342:17:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3601,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3334,"src":"4269:24:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$202","typeString":"contract IBalancerContractRegistry"}},"id":3603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4294:32:20","memberName":"addOrUpdateBalancerContractAlias","nodeType":"MemberAccess","referencedDeclaration":160,"src":"4269:57:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address) external"}},"id":3610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4269:91:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3611,"nodeType":"ExpressionStatement","src":"4269:91:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3594,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"4227:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3595,"name":"aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3354,"src":"4231:10:20","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":3596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4242:6:20","memberName":"length","nodeType":"MemberAccess","src":"4231:17:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4227:21:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3613,"initializationExpression":{"assignments":[3591],"declarations":[{"constant":false,"id":3591,"mutability":"mutable","name":"i","nameLocation":"4220:1:20","nodeType":"VariableDeclaration","scope":3613,"src":"4212:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3590,"name":"uint256","nodeType":"ElementaryTypeName","src":"4212:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3593,"initialValue":{"hexValue":"30","id":3592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4224:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4212:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4250:3:20","subExpression":{"id":3598,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"4252:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3600,"nodeType":"ExpressionStatement","src":"4250:3:20"},"nodeType":"ForStatement","src":"4207:164:20"},{"expression":{"arguments":[{"id":3617,"name":"registerContractRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3491,"src":"4437:20:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3620,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4467:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3619,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4459:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3618,"name":"address","nodeType":"ElementaryTypeName","src":"4459:7:20","typeDescriptions":{}}},"id":3621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4459:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3614,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"4412:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4424:12:20","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":3680,"src":"4412:24:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4412:61:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3623,"nodeType":"ExpressionStatement","src":"4412:61:20"},{"expression":{"arguments":[{"id":3627,"name":"addAliasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3505,"src":"4508:12:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3630,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4530:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4522:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3628,"name":"address","nodeType":"ElementaryTypeName","src":"4522:7:20","typeDescriptions":{}}},"id":3631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4522:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3624,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"4483:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4495:12:20","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":3680,"src":"4483:24:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4483:53:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3633,"nodeType":"ExpressionStatement","src":"4483:53:20"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":3637,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"4572:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4584:18:20","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":3659,"src":"4572:30:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":3639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4572:32:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3642,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4614:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$3648","typeString":"contract BalancerContractRegistryInitializer"}],"id":3641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4606:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3640,"name":"address","nodeType":"ElementaryTypeName","src":"4606:7:20","typeDescriptions":{}}},"id":3643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4606:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3634,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3337,"src":"4547:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$3681","typeString":"contract IBasicAuthorizer"}},"id":3636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4559:12:20","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":3680,"src":"4547:24:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":3644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4547:73:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3645,"nodeType":"ExpressionStatement","src":"4547:73:20"}]},"functionSelector":"bd968c18","id":3647,"implemented":true,"kind":"function","modifiers":[],"name":"initializeBalancerContractRegistry","nameLocation":"2855:34:20","nodeType":"FunctionDefinition","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"2889:2:20"},"returnParameters":{"id":3479,"nodeType":"ParameterList","parameters":[],"src":"2901:0:20"},"scope":3648,"src":"2846:1781:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3649,"src":"752:3877:20","usedErrors":[2644,3360,3363],"usedEvents":[]}],"src":"46:4584:20"},"id":20},"contracts/IBasicAuthorizer.sol":{"ast":{"absolutePath":"contracts/IBasicAuthorizer.sol","exportedSymbols":{"IAuthorizer":[218],"IBasicAuthorizer":[3681]},"id":3682,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3650,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":3652,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3682,"sourceUnit":219,"src":"72:91:21","symbolAliases":[{"foreign":{"id":3651,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"81:11:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3653,"name":"IAuthorizer","nameLocations":["195:11:21"],"nodeType":"IdentifierPath","referencedDeclaration":218,"src":"195:11:21"},"id":3654,"nodeType":"InheritanceSpecifier","src":"195:11:21"}],"canonicalName":"IBasicAuthorizer","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":3681,"linearizedBaseContracts":[3681,218],"name":"IBasicAuthorizer","nameLocation":"175:16:21","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a217fddf","id":3659,"implemented":false,"kind":"function","modifiers":[],"name":"DEFAULT_ADMIN_ROLE","nameLocation":"275:18:21","nodeType":"FunctionDefinition","parameters":{"id":3655,"nodeType":"ParameterList","parameters":[],"src":"293:2:21"},"returnParameters":{"id":3658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3659,"src":"319:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3656,"name":"bytes32","nodeType":"ElementaryTypeName","src":"319:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"318:9:21"},"scope":3681,"src":"266:62:21","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f2ff15d","id":3666,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"343:9:21","nodeType":"FunctionDefinition","parameters":{"id":3664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3661,"mutability":"mutable","name":"role","nameLocation":"361:4:21","nodeType":"VariableDeclaration","scope":3666,"src":"353:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3660,"name":"bytes32","nodeType":"ElementaryTypeName","src":"353:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3663,"mutability":"mutable","name":"account","nameLocation":"375:7:21","nodeType":"VariableDeclaration","scope":3666,"src":"367:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3662,"name":"address","nodeType":"ElementaryTypeName","src":"367:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"352:31:21"},"returnParameters":{"id":3665,"nodeType":"ParameterList","parameters":[],"src":"392:0:21"},"scope":3681,"src":"334:59:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d547741f","id":3673,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"408:10:21","nodeType":"FunctionDefinition","parameters":{"id":3671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3668,"mutability":"mutable","name":"role","nameLocation":"427:4:21","nodeType":"VariableDeclaration","scope":3673,"src":"419:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3667,"name":"bytes32","nodeType":"ElementaryTypeName","src":"419:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3670,"mutability":"mutable","name":"account","nameLocation":"441:7:21","nodeType":"VariableDeclaration","scope":3673,"src":"433:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3669,"name":"address","nodeType":"ElementaryTypeName","src":"433:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"418:31:21"},"returnParameters":{"id":3672,"nodeType":"ParameterList","parameters":[],"src":"458:0:21"},"scope":3681,"src":"399:60:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36568abe","id":3680,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"474:12:21","nodeType":"FunctionDefinition","parameters":{"id":3678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3675,"mutability":"mutable","name":"role","nameLocation":"495:4:21","nodeType":"VariableDeclaration","scope":3680,"src":"487:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3674,"name":"bytes32","nodeType":"ElementaryTypeName","src":"487:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3677,"mutability":"mutable","name":"account","nameLocation":"509:7:21","nodeType":"VariableDeclaration","scope":3680,"src":"501:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3676,"name":"address","nodeType":"ElementaryTypeName","src":"501:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"486:31:21"},"returnParameters":{"id":3679,"nodeType":"ParameterList","parameters":[],"src":"526:0:21"},"scope":3681,"src":"465:62:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3682,"src":"165:364:21","usedErrors":[],"usedEvents":[]}],"src":"46:484:21"},"id":21}},"contracts":{"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"IBalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"existingContract","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"existingContract\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"isActive\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":\"IBalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:14:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:14:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:15:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:15:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"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\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"contracts/BalancerContractRegistryInitializer.sol":{"BalancerContractRegistryInitializer":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IBalancerContractRegistry","name":"_balancerContractRegistry","type":"address"},{"internalType":"string[]","name":"_routerNames","type":"string[]"},{"internalType":"address[]","name":"_routerAddresses","type":"address[]"},{"internalType":"string[]","name":"_poolFactoryNames","type":"string[]"},{"internalType":"address[]","name":"_poolFactoryAddresses","type":"address[]"},{"internalType":"string[]","name":"_aliasNames","type":"string[]"},{"internalType":"address[]","name":"_aliasAddresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"VaultMismatch","type":"error"},{"inputs":[],"name":"balancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeBalancerContractRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_array_address_dyn_fromMemory":{"entryPoint":2696,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_string_dyn_fromMemory":{"entryPoint":2499,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IVault_fromMemory":{"entryPoint":2456,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_string_dyn":{"entryPoint":2476,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_bytes1":{"entryPoint":2865,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":2809,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2421,"id":null,"parameterSlots":2,"returnSlots":0},"fun_ensureInputLengthMatch":{"entryPoint":2887,"id":2669,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60c0604090808252346103b5576115c6803803809161001e8285610975565b8339810190610100818303126103b55761003781610998565b60208201516001600160a01b039391928482169290918381036103b557828701516001600160401b0381116103b557826100729185016109c3565b60608401516001600160401b0381116103b55783610091918601610a88565b60808501519091906001600160401b0381116103b557846100b39187016109c3565b60a08601519093906001600160401b0381116103b557856100d5918801610a88565b60c08701519095906001600160401b0381116103b557816100f79189016109c3565b60e088015190976001600160401b0382116103b55760049260209261011c9201610a88565b9861012a8551875190610b47565b6101378751895190610b47565b61014489518b5190610b47565b8c516311b2515f60e31b815292839182905afa90811561096b575f91610931575b5089808a169116036109225760805280519068010000000000000000821161040157600154826001558083106108a6575b5060015f9081525f5160206115a65f395f51905f5292916020015b82821061079f5750508251929150506001600160401b038211610401576801000000000000000082116104015760209060025483600255808410610783575b500160025f5260205f205f5b83811061076d575050505080519068010000000000000000821161040157600354826003558083106106f1575b5060035f9081525f5160206115865f395f51905f5292916020015b8282106105e05750508251929150506001600160401b0382116104015768010000000000000000821161040157602090600454836004558084106105c4575b500160045f5260205f205f5b8381106105ae57505050508051906801000000000000000082116104015760055482600555808310610532575b5060055f9081525f5160206115665f395f51905f5292916020015b8282106104155750508251929150506001600160401b0382116104015768010000000000000000821161040157602090600654836006558084106103e5575b5090849392910160065f5260205f205f5b8381106103cb5750505050602090600485518094819363aaabadc560e01b8352165afa9081156103c1575f91610382575b501660a05251610a089081610b5e823960805181818160b3015261083e015260a051816101830152f35b90506020813d6020116103b9575b8161039d60209383610975565b810103126103b5575181811681036103b5575f610358565b5f80fd5b3d9150610390565b83513d5f823e3d90fd5b825190951685820155859460209290920191600101610327565b6103fb9060065f5284845f209182019101610b31565b5f610316565b634e487b7160e01b5f52604160045260245ffd5b80518051906001600160401b038211610401576104328654610af9565b90601f918281116104fa575b50602091831160011461048e5792610474836001959460209487965f92610483575b50508160011b915f199060031b1c19161790565b87555b019401910190926102d7565b015190505f80610460565b90865f5260205f20915f5b601f19851681106104e2575083602093600196938796938794601f198116106104ca575b505050811b018755610477565b01515f1960f88460031b161c191690555f80806104bd565b91926020600181928685015181550194019201610499565b61052390885f5260205f208480870160051c82019260208810610529575b0160051c0190610b31565b5f61043e565b92508192610518565b60055f525f5160206115665f395f51905f529081019083015b81811061055857506102bc565b8061056560019254610af9565b80610572575b500161054b565b601f90818111841461058a5750505f81555b5f61056b565b6105a55f9284845260208420920160051c8201858301610b31565b81835555610584565b600190602089855116940193818401550161028f565b6105da9060045f5284845f209182019101610b31565b5f610283565b80518051906001600160401b038211610401576105fd8654610af9565b90601f918281116106b9575b50602091831160011461064d579261063e836001959460209487965f926104835750508160011b915f199060031b1c19161790565b87555b01940191019092610244565b90865f5260205f20915f5b601f19851681106106a1575083602093600196938796938794601f19811610610689575b505050811b018755610641565b01515f1960f88460031b161c191690555f808061067c565b91926020600181928685015181550194019201610658565b6106e290885f5260205f20600585808801821c830193602089106106e8575b01901c0190610b31565b5f610609565b935082936106d8565b60035f525f5160206115865f395f51905f529081019083015b8181106107175750610229565b8061072460019254610af9565b80610731575b500161070a565b601f9081811184146107495750505f81555b5f61072a565b6107645f9284845260208420920160051c8201858301610b31565b81835555610743565b60019060208b85511694019381840155016101fc565b6107999060025f5284845f209182019101610b31565b5f6101f0565b80518051906001600160401b038211610401576107bc8654610af9565b90601f91828111610878575b50602091831160011461080c57926107fd836001959460209487965f926104835750508160011b915f199060031b1c19161790565b87555b019401910190926101b1565b90865f5260205f20915f5b601f1985168110610860575083602093600196938796938794601f19811610610848575b505050811b018755610800565b01515f1960f88460031b161c191690555f808061083b565b91926020600181928685015181550194019201610817565b6108a090885f5260205f20600585808801821c830193602089106106e85701901c0190610b31565b5f6107c8565b60015f525f5160206115a65f395f51905f529081019083015b8181106108cc5750610196565b806108d960019254610af9565b806108e6575b50016108bf565b601f9081811184146108fe5750505f81555b5f6108df565b6109195f9284845260208420920160051c8201858301610b31565b818355556108f8565b63c1faacc560e01b5f5260045ffd5b90506020813d602011610963575b8161094c60209383610975565b810103126103b55761095d90610998565b5f610165565b3d915061093f565b8b513d5f823e3d90fd5b601f909101601f19168101906001600160401b0382119082101761040157604052565b51906001600160a01b03821682036103b557565b6001600160401b0381116104015760051b60200190565b601f9180601f830112156103b5578151916020926109e0816109ac565b946040936109f16040519788610975565b828752858088019360051b850101948186116103b557868501935b868510610a1e57505050505050505090565b84516001600160401b0391908281116103b55787019084603f830112156103b55789820151928311610401578351610a5e848801601f19168c0182610975565b838152858585850101116103b5575f8b858196888397018386015e83010152815201940193610a0c565b9080601f830112156103b557815190602091610aa3816109ac565b93610ab16040519586610975565b81855260208086019260051b8201019283116103b557602001905b828210610ada575050505090565b81516001600160a01b03811681036103b5578152908301908301610acc565b90600182811c92168015610b27575b6020831014610b1357565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610b08565b818110610b3c575050565b5f8155600101610b31565b03610b4e57565b63aaad13f760e01b5f5260045ffdfe6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea26469706673582212204c39ba673968bc422cef5a162adb229b4e53181cb83169db1195dd070115938064736f6c634300081b0033036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85bb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6","opcodes":"PUSH1 0xC0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x3B5 JUMPI PUSH2 0x15C6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP6 PUSH2 0x975 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SWAP1 PUSH2 0x100 DUP2 DUP4 SUB SLT PUSH2 0x3B5 JUMPI PUSH2 0x37 DUP2 PUSH2 0x998 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP2 SWAP3 DUP5 DUP3 AND SWAP3 SWAP1 SWAP2 DUP4 DUP2 SUB PUSH2 0x3B5 JUMPI DUP3 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP3 PUSH2 0x72 SWAP2 DUP6 ADD PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP4 PUSH2 0x91 SWAP2 DUP7 ADD PUSH2 0xA88 JUMP JUMPDEST PUSH1 0x80 DUP6 ADD MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP5 PUSH2 0xB3 SWAP2 DUP8 ADD PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MLOAD SWAP1 SWAP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP6 PUSH2 0xD5 SWAP2 DUP9 ADD PUSH2 0xA88 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MLOAD SWAP1 SWAP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3B5 JUMPI DUP2 PUSH2 0xF7 SWAP2 DUP10 ADD PUSH2 0x9C3 JUMP JUMPDEST PUSH1 0xE0 DUP9 ADD MLOAD SWAP1 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3B5 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x11C SWAP3 ADD PUSH2 0xA88 JUMP JUMPDEST SWAP9 PUSH2 0x12A DUP6 MLOAD DUP8 MLOAD SWAP1 PUSH2 0xB47 JUMP JUMPDEST PUSH2 0x137 DUP8 MLOAD DUP10 MLOAD SWAP1 PUSH2 0xB47 JUMP JUMPDEST PUSH2 0x144 DUP10 MLOAD DUP12 MLOAD SWAP1 PUSH2 0xB47 JUMP JUMPDEST DUP13 MLOAD PUSH4 0x11B2515F PUSH1 0xE3 SHL DUP2 MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x96B JUMPI PUSH0 SWAP2 PUSH2 0x931 JUMPI JUMPDEST POP DUP10 DUP1 DUP11 AND SWAP2 AND SUB PUSH2 0x922 JUMPI PUSH1 0x80 MSTORE DUP1 MLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x1 SLOAD DUP3 PUSH1 0x1 SSTORE DUP1 DUP4 LT PUSH2 0x8A6 JUMPI JUMPDEST POP PUSH1 0x1 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x15A6 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x79F JUMPI POP POP DUP3 MLOAD SWAP3 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD DUP4 PUSH1 0x2 SSTORE DUP1 DUP5 LT PUSH2 0x783 JUMPI JUMPDEST POP ADD PUSH1 0x2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x76D JUMPI POP POP POP POP DUP1 MLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x3 SLOAD DUP3 PUSH1 0x3 SSTORE DUP1 DUP4 LT PUSH2 0x6F1 JUMPI JUMPDEST POP PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x1586 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x5E0 JUMPI POP POP DUP3 MLOAD SWAP3 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x4 SLOAD DUP4 PUSH1 0x4 SSTORE DUP1 DUP5 LT PUSH2 0x5C4 JUMPI JUMPDEST POP ADD PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x5AE JUMPI POP POP POP POP DUP1 MLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x5 SLOAD DUP3 PUSH1 0x5 SSTORE DUP1 DUP4 LT PUSH2 0x532 JUMPI JUMPDEST POP PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x1566 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x415 JUMPI POP POP DUP3 MLOAD SWAP3 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x401 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x6 SLOAD DUP4 PUSH1 0x6 SSTORE DUP1 DUP5 LT PUSH2 0x3E5 JUMPI JUMPDEST POP SWAP1 DUP5 SWAP4 SWAP3 SWAP2 ADD PUSH1 0x6 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x3CB JUMPI POP POP POP POP PUSH1 0x20 SWAP1 PUSH1 0x4 DUP6 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP4 MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3C1 JUMPI PUSH0 SWAP2 PUSH2 0x382 JUMPI JUMPDEST POP AND PUSH1 0xA0 MSTORE MLOAD PUSH2 0xA08 SWAP1 DUP2 PUSH2 0xB5E DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xB3 ADD MSTORE PUSH2 0x83E ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x183 ADD MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3B9 JUMPI JUMPDEST DUP2 PUSH2 0x39D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x975 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B5 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x3B5 JUMPI PUSH0 PUSH2 0x358 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x390 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 MLOAD SWAP1 SWAP6 AND DUP6 DUP3 ADD SSTORE DUP6 SWAP5 PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x327 JUMP JUMPDEST PUSH2 0x3FB SWAP1 PUSH1 0x6 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x316 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH2 0x432 DUP7 SLOAD PUSH2 0xAF9 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x4FA JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x48E JUMPI SWAP3 PUSH2 0x474 DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x483 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x2D7 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x460 JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x4E2 JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x4CA JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x477 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x4BD JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x499 JUMP JUMPDEST PUSH2 0x523 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 DUP5 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 PUSH1 0x20 DUP9 LT PUSH2 0x529 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x43E JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x518 JUMP JUMPDEST PUSH1 0x5 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x1566 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x558 JUMPI POP PUSH2 0x2BC JUMP JUMPDEST DUP1 PUSH2 0x565 PUSH1 0x1 SWAP3 SLOAD PUSH2 0xAF9 JUMP JUMPDEST DUP1 PUSH2 0x572 JUMPI JUMPDEST POP ADD PUSH2 0x54B JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x58A JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x56B JUMP JUMPDEST PUSH2 0x5A5 PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB31 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x584 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x20 DUP10 DUP6 MLOAD AND SWAP5 ADD SWAP4 DUP2 DUP5 ADD SSTORE ADD PUSH2 0x28F JUMP JUMPDEST PUSH2 0x5DA SWAP1 PUSH1 0x4 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x283 JUMP JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH2 0x5FD DUP7 SLOAD PUSH2 0xAF9 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x6B9 JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x64D JUMPI SWAP3 PUSH2 0x63E DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x483 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x244 JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x6A1 JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x689 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x641 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x67C JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x658 JUMP JUMPDEST PUSH2 0x6E2 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x5 DUP6 DUP1 DUP9 ADD DUP3 SHR DUP4 ADD SWAP4 PUSH1 0x20 DUP10 LT PUSH2 0x6E8 JUMPI JUMPDEST ADD SWAP1 SHR ADD SWAP1 PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x609 JUMP JUMPDEST SWAP4 POP DUP3 SWAP4 PUSH2 0x6D8 JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x1586 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x717 JUMPI POP PUSH2 0x229 JUMP JUMPDEST DUP1 PUSH2 0x724 PUSH1 0x1 SWAP3 SLOAD PUSH2 0xAF9 JUMP JUMPDEST DUP1 PUSH2 0x731 JUMPI JUMPDEST POP ADD PUSH2 0x70A JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x749 JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x72A JUMP JUMPDEST PUSH2 0x764 PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB31 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x743 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x20 DUP12 DUP6 MLOAD AND SWAP5 ADD SWAP4 DUP2 DUP5 ADD SSTORE ADD PUSH2 0x1FC JUMP JUMPDEST PUSH2 0x799 SWAP1 PUSH1 0x2 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x1F0 JUMP JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x401 JUMPI PUSH2 0x7BC DUP7 SLOAD PUSH2 0xAF9 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x878 JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x80C JUMPI SWAP3 PUSH2 0x7FD DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x483 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x1B1 JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x860 JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x848 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x800 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x83B JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x817 JUMP JUMPDEST PUSH2 0x8A0 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x5 DUP6 DUP1 DUP9 ADD DUP3 SHR DUP4 ADD SWAP4 PUSH1 0x20 DUP10 LT PUSH2 0x6E8 JUMPI ADD SWAP1 SHR ADD SWAP1 PUSH2 0xB31 JUMP JUMPDEST PUSH0 PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x1 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x15A6 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x8CC JUMPI POP PUSH2 0x196 JUMP JUMPDEST DUP1 PUSH2 0x8D9 PUSH1 0x1 SWAP3 SLOAD PUSH2 0xAF9 JUMP JUMPDEST DUP1 PUSH2 0x8E6 JUMPI JUMPDEST POP ADD PUSH2 0x8BF JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x8FE JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x8DF JUMP JUMPDEST PUSH2 0x919 PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB31 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x8F8 JUMP JUMPDEST PUSH4 0xC1FAACC5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x963 JUMPI JUMPDEST DUP2 PUSH2 0x94C PUSH1 0x20 SWAP4 DUP4 PUSH2 0x975 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B5 JUMPI PUSH2 0x95D SWAP1 PUSH2 0x998 JUMP JUMPDEST PUSH0 PUSH2 0x165 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x93F JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x401 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x3B5 JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x401 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1F SWAP2 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x3B5 JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 PUSH2 0x9E0 DUP2 PUSH2 0x9AC JUMP JUMPDEST SWAP5 PUSH1 0x40 SWAP4 PUSH2 0x9F1 PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x975 JUMP JUMPDEST DUP3 DUP8 MSTORE DUP6 DUP1 DUP9 ADD SWAP4 PUSH1 0x5 SHL DUP6 ADD ADD SWAP5 DUP2 DUP7 GT PUSH2 0x3B5 JUMPI DUP7 DUP6 ADD SWAP4 JUMPDEST DUP7 DUP6 LT PUSH2 0xA1E JUMPI POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 SWAP1 DUP3 DUP2 GT PUSH2 0x3B5 JUMPI DUP8 ADD SWAP1 DUP5 PUSH1 0x3F DUP4 ADD SLT ISZERO PUSH2 0x3B5 JUMPI DUP10 DUP3 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x401 JUMPI DUP4 MLOAD PUSH2 0xA5E DUP5 DUP9 ADD PUSH1 0x1F NOT AND DUP13 ADD DUP3 PUSH2 0x975 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP6 DUP6 DUP6 DUP6 ADD ADD GT PUSH2 0x3B5 JUMPI PUSH0 DUP12 DUP6 DUP2 SWAP7 DUP9 DUP4 SWAP8 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP4 PUSH2 0xA0C JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x3B5 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0xAA3 DUP2 PUSH2 0x9AC JUMP JUMPDEST SWAP4 PUSH2 0xAB1 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x975 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x3B5 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xADA JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x3B5 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xACC JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xB27 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB13 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xB08 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0xB3C JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB31 JUMP JUMPDEST SUB PUSH2 0xB4E JUMPI JUMP JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x2623A2D0 EQ PUSH2 0x7F6 JUMPI POP PUSH4 0xBD968C18 EQ PUSH2 0x37 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0xFF DUP5 AND PUSH2 0x7CF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP4 PUSH1 0x1 SWAP5 DUP6 SWAP2 AND OR PUSH0 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP3 DUP3 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP5 MSTORE PUSH32 0xE0376AB400000000000000000000000000000000000000000000000000000000 SWAP2 DUP3 DUP5 DUP7 ADD MSTORE PUSH1 0x20 SWAP7 PUSH1 0x24 SWAP2 DUP9 DUP8 DUP5 DUP2 DUP6 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x7C5 JUMPI PUSH0 SWAP8 PUSH2 0x796 JUMPI JUMPDEST POP DUP8 MLOAD SWAP4 DUP5 MSTORE PUSH32 0x2967AF9600000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP8 DUP7 ADD MSTORE DUP10 DUP6 DUP6 DUP2 DUP7 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x78C JUMPI PUSH0 SWAP6 PUSH2 0x75D JUMPI JUMPDEST POP DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x3B4 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP10 DUP3 ADD DUP12 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x753 JUMPI PUSH2 0x740 JUMPI JUMPDEST POP DUP8 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP9 DUP2 ADD DUP8 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP14 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x71F JUMPI JUMPDEST POP SWAP6 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP1 JUMPDEST PUSH2 0x608 JUMPI JUMPDEST POP DUP12 DUP14 JUMPDEST PUSH2 0x511 JUMPI JUMPDEST POP POP DUP12 DUP12 SWAP1 JUMPDEST PUSH2 0x3FF JUMPI JUMPDEST POP POP POP POP POP DUP7 SWAP8 POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP5 DUP3 ADD SWAP6 DUP7 MSTORE ADDRESS PUSH1 0x20 DUP8 ADD MSTORE SWAP5 DUP9 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x3F5 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0x3E1 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x3BF JUMPI SWAP1 DUP8 SWAP2 PUSH2 0x3C9 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x3BF JUMPI DUP8 SWAP7 PUSH2 0x388 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0x384 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x37B JUMPI POP PUSH2 0x368 JUMPI POP RETURN JUMPDEST PUSH2 0x371 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x378 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0x3B8 JUMPI JUMPDEST PUSH2 0x3A1 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI DUP6 SWAP5 MLOAD SWAP4 PUSH0 DUP1 PUSH2 0x32C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x397 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x3D2 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x384 JUMPI DUP6 PUSH0 PUSH2 0x2F0 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0x3EA SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x3DD JUMPI DUP7 PUSH0 PUSH2 0x2B8 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x6 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x4E1 JUMPI PUSH0 MSTORE DUP2 DUP2 PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD SLOAD AND DUP5 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP13 DUP12 DUP1 MLOAD DUP1 SWAP4 DUP2 SWAP3 DUP9 DUP4 MSTORE DUP14 DUP4 ADD MSTORE PUSH2 0x481 PUSH1 0x44 DUP4 ADD DUP8 PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 DUP11 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x4AE JUMPI JUMPDEST POP POP DUP6 ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x4BE SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x4A0 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x32 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x259 JUMP JUMPDEST DUP14 PUSH1 0x3 SLOAD DUP3 LT ISZERO PUSH2 0x602 JUMPI POP DUP9 SLOAD DUP2 LT ISZERO PUSH2 0x4E1 JUMPI DUP9 PUSH0 MSTORE DUP3 DUP2 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD SLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x5FE JUMPI DUP14 DUP16 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x59B PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x5CF JUMPI JUMPDEST POP POP SWAP1 DUP7 DUP1 SWAP3 ADD SWAP2 POP SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x249 JUMP JUMPDEST PUSH2 0x5E0 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x5BC JUMP JUMPDEST DUP15 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP14 DUP1 REVERT JUMPDEST POP PUSH2 0x24E JUMP JUMPDEST DUP14 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x719 JUMPI POP PUSH1 0x2 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x6EE JUMPI DUP1 PUSH0 MSTORE DUP4 DUP3 PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE ADD SLOAD AND SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x6EA JUMPI DUP15 SWAP1 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x694 PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x6C7 JUMPI JUMPDEST POP POP DUP7 DUP1 SWAP2 ADD SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 POP PUSH2 0x240 JUMP JUMPDEST PUSH2 0x6D8 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x6B5 JUMP JUMPDEST DUP15 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x32 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP PUSH2 0x245 JUMP JUMPDEST PUSH2 0x72F SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x236 JUMP JUMPDEST PUSH2 0x74B SWAP2 SWAP14 POP PUSH2 0x862 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0x1FA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x785 JUMPI JUMPDEST PUSH2 0x775 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x17F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x76B JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7BE JUMPI JUMPDEST PUSH2 0x7AE DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP6 PUSH0 PUSH2 0x13D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7A4 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 SLOAD PUSH0 SWAP4 SWAP3 PUSH1 0x1 DUP1 DUP4 AND SWAP4 DUP4 DUP3 SHR SWAP4 DUP6 ISZERO PUSH2 0x9C8 JUMPI JUMPDEST PUSH1 0x20 SWAP6 DUP7 DUP7 LT DUP2 EQ PUSH2 0x99B JUMPI DUP6 DUP6 MSTORE SWAP1 DUP2 ISZERO PUSH2 0x95E JUMPI POP PUSH1 0x1 EQ PUSH2 0x920 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP4 SWAP5 SWAP6 POP PUSH0 SWAP3 SWAP2 SWAP3 MSTORE DUP4 PUSH0 KECCAK256 SWAP3 DUP5 PUSH0 SWAP5 JUMPDEST DUP4 DUP7 LT PUSH2 0x94A JUMPI POP POP POP POP ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST DUP1 SLOAD DUP6 DUP8 ADD DUP4 ADD MSTORE SWAP5 ADD SWAP4 DUP6 SWAP1 DUP3 ADD PUSH2 0x932 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP6 ADD MSTORE POP POP POP SWAP1 ISZERO ISZERO PUSH1 0x5 SHL ADD ADD SWAP2 POP PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x8FA JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4C CODECOPY 0xBA PUSH8 0x3968BC422CEF5A16 0x2A 0xDB 0x22 SWAP12 0x4E MSTORE8 XOR SHR 0xB8 BALANCE PUSH10 0xDB1195DD070115938064 PUSH20 0x6F6C634300081B0033036B6384B5ECA791C62761 ISZERO 0x2D 0xC PUSH26 0xBB0604C104A5FB6F4EB0703F3154BB3DB0C2575A0E9E593C00F9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85BB10E2D527612073B26EECDFD71 PUSH31 0x6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF600000000000000000000000000 ","sourceMap":"752:3877:20:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;2286:70;752:3877;;;;;;;:::i;:::-;;1949:23;752:3877;;;;1949:23;;:::i;:::-;2045:28;752:3877;;;;2045:28;;:::i;:::-;2140:22;752:3877;;;;2140:22;;:::i;:::-;752:3877;;-1:-1:-1;;;2286:70:20;;752:3877;;;;;2286:70;;;;;;;-1:-1:-1;2286:70:20;;;-1:-1:-1;752:3877:20;;;;;;;2370:22;2366:75;;752:3877;2451:52;752:3877;;;;;;;;2514:26;752:3877;;2514:26;752:3877;;;;;;-1:-1:-1;;2514:26:20;-1:-1:-1;752:3877:20;;;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;-1:-1:-1;;;;;;;752:3877:20;;;;;;;;;;;2550:34;752:3877;;2550:34;752:3877;;;;;;;;;2550:34;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;2594:36;752:3877;;2594:36;752:3877;;;;;;;-1:-1:-1;2594:36:20;-1:-1:-1;752:3877:20;;;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;-1:-1:-1;;;;;;;752:3877:20;;;;;;;;;;;2286:70;752:3877;;2286:70;752:3877;;;;;;;;;2286:70;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;2694:24;752:3877;;2694:24;752:3877;;;;;;;-1:-1:-1;2694:24:20;-1:-1:-1;752:3877:20;;;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;-1:-1:-1;;;;;;;752:3877:20;;;;;;;;;;;2728:32;752:3877;;2728:32;752:3877;;;;;;;;;;;;;;2728:32;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;752:3877:20;;;;;;;;;;;;2286:70;752:3877;;;;;;;;;2810:21;;752:3877;2810:21;;;;;;;-1:-1:-1;2810:21:20;;;752:3877;;;;2771:62;752:3877;;;;;;;;;;;;;;;;;;;;;;;;;2810:21;;;752:3877;2810:21;;752:3877;2810:21;;;;;;752:3877;2810:21;;;:::i;:::-;;;752:3877;;;;;;;;;;;;2810:21;;;752:3877;-1:-1:-1;752:3877:20;;2810:21;;;-1:-1:-1;2810:21:20;;;752:3877;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;2728:32;-1:-1:-1;752:3877:20;;;-1:-1:-1;752:3877:20;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;752:3877:20;;2286:70;752:3877;;-1:-1:-1;752:3877:20;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;;752:3877:20;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2594:36;752:3877;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;;;;2694:24;752:3877;;;;;;;;;;;2694:24;752:3877;;;;:::i;:::-;;;;;;;;;;;;2694:24;-1:-1:-1;752:3877:20;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;2694:24;752:3877;;;;;;;:::i;:::-;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;2286:70;-1:-1:-1;752:3877:20;;;-1:-1:-1;752:3877:20;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;;752:3877:20;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2594:36;752:3877;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;2594:36;-1:-1:-1;752:3877:20;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;2550:34;-1:-1:-1;752:3877:20;;;-1:-1:-1;752:3877:20;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;-1:-1:-1;;752:3877:20;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2514:26;-1:-1:-1;752:3877:20;-1:-1:-1;;;;;;;;;;;752:3877:20;;;;;;;;;;;;;;;;;;2514:26;752:3877;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;2366:75;2415:15;;;-1:-1:-1;2415:15:20;2286:70;-1:-1:-1;2415:15:20;2286:70;;;752:3877;2286:70;;752:3877;2286:70;;;;;;752:3877;2286:70;;;:::i;:::-;;;752:3877;;;;;;;:::i;:::-;2286:70;;;;;;-1:-1:-1;2286:70:20;;;752:3877;;;-1:-1:-1;752:3877:20;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;752:3877:20;;;;;;:::o;:::-;-1:-1:-1;;;;;752:3877:20;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;752:3877:20;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;1418:149:15;1500:6;1496:65;;1418:149::o;1496:65::-;1529:21;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string_storage":{"entryPoint":2276,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2211,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_2885":{"entryPoint":2146,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"3334":[{"length":32,"start":179},{"length":32,"start":2110}],"3337":[{"length":32,"start":387}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea26469706673582212204c39ba673968bc422cef5a162adb229b4e53181cb83169db1195dd070115938064736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x2623A2D0 EQ PUSH2 0x7F6 JUMPI POP PUSH4 0xBD968C18 EQ PUSH2 0x37 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0xFF DUP5 AND PUSH2 0x7CF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP4 PUSH1 0x1 SWAP5 DUP6 SWAP2 AND OR PUSH0 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP3 DUP3 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP5 MSTORE PUSH32 0xE0376AB400000000000000000000000000000000000000000000000000000000 SWAP2 DUP3 DUP5 DUP7 ADD MSTORE PUSH1 0x20 SWAP7 PUSH1 0x24 SWAP2 DUP9 DUP8 DUP5 DUP2 DUP6 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x7C5 JUMPI PUSH0 SWAP8 PUSH2 0x796 JUMPI JUMPDEST POP DUP8 MLOAD SWAP4 DUP5 MSTORE PUSH32 0x2967AF9600000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP8 DUP7 ADD MSTORE DUP10 DUP6 DUP6 DUP2 DUP7 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x78C JUMPI PUSH0 SWAP6 PUSH2 0x75D JUMPI JUMPDEST POP DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x3B4 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP10 DUP3 ADD DUP12 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x753 JUMPI PUSH2 0x740 JUMPI JUMPDEST POP DUP8 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP9 DUP2 ADD DUP8 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP14 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x71F JUMPI JUMPDEST POP SWAP6 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP1 JUMPDEST PUSH2 0x608 JUMPI JUMPDEST POP DUP12 DUP14 JUMPDEST PUSH2 0x511 JUMPI JUMPDEST POP POP DUP12 DUP12 SWAP1 JUMPDEST PUSH2 0x3FF JUMPI JUMPDEST POP POP POP POP POP DUP7 SWAP8 POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP5 DUP3 ADD SWAP6 DUP7 MSTORE ADDRESS PUSH1 0x20 DUP8 ADD MSTORE SWAP5 DUP9 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x3F5 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0x3E1 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x3BF JUMPI SWAP1 DUP8 SWAP2 PUSH2 0x3C9 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x3BF JUMPI DUP8 SWAP7 PUSH2 0x388 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0x384 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x37B JUMPI POP PUSH2 0x368 JUMPI POP RETURN JUMPDEST PUSH2 0x371 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x378 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0x3B8 JUMPI JUMPDEST PUSH2 0x3A1 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI DUP6 SWAP5 MLOAD SWAP4 PUSH0 DUP1 PUSH2 0x32C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x397 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x3D2 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x384 JUMPI DUP6 PUSH0 PUSH2 0x2F0 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0x3EA SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x3DD JUMPI DUP7 PUSH0 PUSH2 0x2B8 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x6 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x4E1 JUMPI PUSH0 MSTORE DUP2 DUP2 PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD SLOAD AND DUP5 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP13 DUP12 DUP1 MLOAD DUP1 SWAP4 DUP2 SWAP3 DUP9 DUP4 MSTORE DUP14 DUP4 ADD MSTORE PUSH2 0x481 PUSH1 0x44 DUP4 ADD DUP8 PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 DUP11 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x4AE JUMPI JUMPDEST POP POP DUP6 ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x4BE SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x4A0 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x32 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x259 JUMP JUMPDEST DUP14 PUSH1 0x3 SLOAD DUP3 LT ISZERO PUSH2 0x602 JUMPI POP DUP9 SLOAD DUP2 LT ISZERO PUSH2 0x4E1 JUMPI DUP9 PUSH0 MSTORE DUP3 DUP2 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD SLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x5FE JUMPI DUP14 DUP16 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x59B PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x5CF JUMPI JUMPDEST POP POP SWAP1 DUP7 DUP1 SWAP3 ADD SWAP2 POP SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x249 JUMP JUMPDEST PUSH2 0x5E0 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x5BC JUMP JUMPDEST DUP15 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP14 DUP1 REVERT JUMPDEST POP PUSH2 0x24E JUMP JUMPDEST DUP14 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x719 JUMPI POP PUSH1 0x2 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x6EE JUMPI DUP1 PUSH0 MSTORE DUP4 DUP3 PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE ADD SLOAD AND SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x6EA JUMPI DUP15 SWAP1 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x694 PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x6C7 JUMPI JUMPDEST POP POP DUP7 DUP1 SWAP2 ADD SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 POP PUSH2 0x240 JUMP JUMPDEST PUSH2 0x6D8 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x6B5 JUMP JUMPDEST DUP15 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x32 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP PUSH2 0x245 JUMP JUMPDEST PUSH2 0x72F SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x236 JUMP JUMPDEST PUSH2 0x74B SWAP2 SWAP14 POP PUSH2 0x862 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0x1FA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x785 JUMPI JUMPDEST PUSH2 0x775 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x17F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x76B JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7BE JUMPI JUMPDEST PUSH2 0x7AE DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP6 PUSH0 PUSH2 0x13D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7A4 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 SLOAD PUSH0 SWAP4 SWAP3 PUSH1 0x1 DUP1 DUP4 AND SWAP4 DUP4 DUP3 SHR SWAP4 DUP6 ISZERO PUSH2 0x9C8 JUMPI JUMPDEST PUSH1 0x20 SWAP6 DUP7 DUP7 LT DUP2 EQ PUSH2 0x99B JUMPI DUP6 DUP6 MSTORE SWAP1 DUP2 ISZERO PUSH2 0x95E JUMPI POP PUSH1 0x1 EQ PUSH2 0x920 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP4 SWAP5 SWAP6 POP PUSH0 SWAP3 SWAP2 SWAP3 MSTORE DUP4 PUSH0 KECCAK256 SWAP3 DUP5 PUSH0 SWAP5 JUMPDEST DUP4 DUP7 LT PUSH2 0x94A JUMPI POP POP POP POP ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST DUP1 SLOAD DUP6 DUP8 ADD DUP4 ADD MSTORE SWAP5 ADD SWAP4 DUP6 SWAP1 DUP3 ADD PUSH2 0x932 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP6 ADD MSTORE POP POP POP SWAP1 ISZERO ISZERO PUSH1 0x5 SHL ADD ADD SWAP2 POP PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x8FA JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4C CODECOPY 0xBA PUSH8 0x3968BC422CEF5A16 0x2A 0xDB 0x22 SWAP12 0x4E MSTORE8 XOR SHR 0xB8 BALANCE PUSH10 0xDB1195DD070115938064 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"752:3877:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2970:70;;752:3877;3065:4;;752:3877;;;;;;;;3203:24;;752:3877;;;;;;3179:145;;;3255:59;3179:145;;;;;752:3877;3179:145;752:3877;;3179:145;;;;;;;;;;;;;752:3877;3179:145;;;752:3877;;;;3357:153;;;3433:67;3357:153;;;;;752:3877;3357:153;;;;;;;;;;;;752:3877;3357:153;;;752:3877;3521:11;;;752:3877;3521:58;;;;;;752:3877;;;3521:58;;;;;;752:3877;;;3573:4;752:3877;;;;;;;;;;;;;;;3521:58;;;;;;;;;;;;752:3877;3589:50;;;;;;752:3877;;3589:50;;;;;;752:3877;;;3573:4;752:3877;;;;3573:4;;752:3877;;;;;;3589:50;;;;;;;;;;;;;;;;;;;;;752:3877;3679:13;;;;;;;;3674:180;3065:4;;;3674:180;-1:-1:-1;3900:13:20;;3065:4;;;3895:263;4212:13;;;;4207:164;3065:4;;;4207:164;4412:61;;;;;;;;;;;;;752:3877;;;4412:61;;;;;;752:3877;;;3573:4;752:3877;;;;;;;;;;;;;4412:61;;;;;;;;;;;;;;;4207:164;4483:53;;;;;;;752:3877;;4483:53;;;;;;752:3877;;;3573:4;752:3877;;;;;;;;;;;;;4483:53;;;;;;;;;;;;;;;4207:164;752:3877;;;;;4572:32;;;;;;;;;;;;;;;;;;4207:164;4547:73;;;;;;;752:3877;;4547:73;;;;;;752:3877;;;3573:4;752:3877;;;;;;;;;;;;;;;;;;4547:73;;;;;;;;;;;;752:3877;;4547:73;;;;:::i;:::-;752:3877;;4547:73;752:3877;;;;4547:73;752:3877;;;;;;;;4547:73;752:3877;;;4572:32;;;;;;;;;;;;;;;;;;:::i;:::-;;;752:3877;;;;;;;4572:32;;;;;752:3877;;;;4572:32;;;;;;752:3877;;;;;;;;;4483:53;;;;:::i;:::-;752:3877;;4483:53;;;;;752:3877;;;4412:61;;;;:::i;:::-;752:3877;;4412:61;;;;;752:3877;;;;;;;;;4250:3;4231:10;752:3877;4227:21;;;;;4342:14;752:3877;;;;;;;;;;;;;;;4269:91;;;;;752:3877;;;;4269:91;;;;;;;;;;752:3877;;;;;;;;;:::i;:::-;;;;;;4269:91;;;;;;;;;;;;;;;;;;;;;4250:3;;;;752:3877;4212:13;;;;;;;4269:91;;;;;;;;;;;:::i;:::-;752:3877;;4269:91;;;;;;;;;;752:3877;;;;4269:91;752:3877;;;;;;;;;4269:91;752:3877;;;;;;;;;;;;;4227:21;;;3944:3;752:3877;;;3915:27;;;;;752:3877;;;;;;;;;;;;;;;;;3963:184;;;;;752:3877;;;;;3963:184;;;;;;;;;;752:3877;;;;;;;;;;;;;;:::i;:::-;;;;;;3963:184;;;;;;;;;;;;;;;;;;;;;;3944:3;;;;;;;752:3877;3900:13;;;;;;;;;3963:184;;;;;;;;;;;;:::i;:::-;752:3877;;3963:184;;;;;;;;;;;;752:3877;;;;;;;;;;;3963:184;752:3877;;;3915:27;;;;3718:3;752:3877;;;3694:22;;;;;3787:19;;752:3877;;;;;;;;;;;;;;;;3737:106;;;;;;752:3877;;;;;3737:106;;;;;;;;;;752:3877;;;;;;;;;;;;;;:::i;:::-;;;;;;3737:106;;;;;;;;;;;;;;;;;;;;;;3718:3;;;;;;752:3877;3679:13;;;;;;;;;3737:106;;;;;;;;;;;;:::i;:::-;752:3877;;3737:106;;;;;;;;;;;;752:3877;;;;;;;;;;;;;3694:22;;;;3589:50;;;;;;;;;;;:::i;:::-;752:3877;;3589:50;;;;;;;;;;3521:58;;;;;;:::i;:::-;752:3877;3521:58;;;;;752:3877;;;;;;;;;3357:153;;;;;;;;;;;;;;;;;:::i;:::-;;;752:3877;;;;;3357:153;;;;;;;;;;752:3877;;;;;;;;;3179:145;;;;;;;;;;;;;;;;;:::i;:::-;;;752:3877;;;;;3179:145;;;;;;;;;;752:3877;;;;;;;;;2970:70;3009:20;;752:3877;3009:20;752:3877;3009:20;752:3877;;;;;;;;;;;;803:67;752:3877;803:67;752:3877;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;752:3877:20;;;;;-1:-1:-1;752:3877:20;;;-1:-1:-1;752:3877:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;752:3877:20;;;;;;;;-1:-1:-1;752:3877:20;;;;;;;;;-1:-1:-1;752:3877:20;;;;;-1:-1:-1;752:3877:20;;;;;;;"},"methodIdentifiers":{"balancerContractRegistry()":"2623a2d0","initializeBalancerContractRegistry()":"bd968c18"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"_balancerContractRegistry\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"_routerNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"_routerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"_poolFactoryNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"_poolFactoryAddresses\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"_aliasNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"_aliasAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"balancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeBalancerContractRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"notice\":\"The initialization can only be done once.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"VaultMismatch()\":[{\"notice\":\"The Vault passed in as a sanity check doesn't match the Vault associated with the registry.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerContractRegistryInitializer.sol\":\"BalancerContractRegistryInitializer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0x8269c3d76a04686d0d0b6e91203d6e482c9cea6f72bbda717395a395f1c15962\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0494f06d5cca9e62f2446597912b75c6423ae312179514e64ea2f4b61772059a\",\"dweb:/ipfs/QmUBnXs6hKM7LQxuK7dzuXkoo3jDmg3dJRKSU1rMW5u2VD\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/BalancerContractRegistryInitializer.sol\":{\"keccak256\":\"0x56f8e67ee71abd449fa27fd9a9b379ee292aba0a9db35cab8bfa694170dfc9e8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e981beb8286e9e22c28a1e40836d2c8fdae84b0691e34c60817250e360840c1c\",\"dweb:/ipfs/Qme1m4TbV34nQnq4NFXnouRzfpp38WhGJrY7qAUxQwMMYP\"]},\"contracts/IBasicAuthorizer.sol\":{\"keccak256\":\"0xbda2c695fbb5f3a7e3b76b0390be6547ff73a4cbf96416c0e031c9613181c4ad\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f36524c565690b16dfade3ca789be75a7f2d39083277682cf001c3a004790a9a\",\"dweb:/ipfs/QmeTChx3pYM2kGirNhJVncVx7jFct7XfT2LeowkJcrgfSr\"]}},\"version\":1}"}},"contracts/IBasicAuthorizer.sol":{"IBasicAuthorizer":{"abi":[{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","canPerform(bytes32,address,address)":"9be2a884","grantRole(bytes32,address)":"2f2ff15d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/IBasicAuthorizer.sol\":\"IBasicAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"contracts/IBasicAuthorizer.sol\":{\"keccak256\":\"0xbda2c695fbb5f3a7e3b76b0390be6547ff73a4cbf96416c0e031c9613181c4ad\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f36524c565690b16dfade3ca789be75a7f2d39083277682cf001c3a004790a9a\",\"dweb:/ipfs/QmeTChx3pYM2kGirNhJVncVx7jFct7XfT2LeowkJcrgfSr\"]}},\"version\":1}"}}}}} \ No newline at end of file +{"id":"94cb142d4dd012afe6f4b76b6ec3da02","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"../vault/IAuthorizer.sol\";\n\ninterface IBasicAuthorizer is IAuthorizer {\n // solhint-disable-next-line func-name-mixedcase\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Registered contracts must be one of these types.\nenum ContractType {\n OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case\n POOL_FACTORY,\n ROUTER,\n HOOK,\n ERC4626\n}\n\ninterface IBalancerContractRegistry {\n /**\n * @notice Store the state of a registered Balancer contract.\n * @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n * differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n * only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n * the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n * things that don't find into the standard types (e.g., helper contracts).\n *\n * @param contractType The type of contract (e.g., Router or Hook)\n * @param isRegistered This flag indicates whether there is an entry for the associated address\n * @param isActive If there is an entry, this flag indicates whether it is active or deprecated\n */\n struct ContractInfo {\n ContractType contractType;\n bool isRegistered;\n bool isActive;\n }\n\n /**\n * @notice Emitted when a new contract is registered.\n * @param contractType The type of contract being registered\n * @param contractName The name of the contract being registered\n * @param contractAddress The address of the contract being registered\n */\n event BalancerContractRegistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a new contract is deregistered (deleted).\n * @param contractType The type of contract being deregistered\n * @param contractName The name of the contract being deregistered\n * @param contractAddress The address of the contract being deregistered\n */\n event BalancerContractDeregistered(\n ContractType indexed contractType,\n string indexed contractName,\n address indexed contractAddress\n );\n\n /**\n * @notice Emitted when a registered contract is deprecated.\n * @dev This sets the `isActive` flag to false.\n * @param contractAddress The address of the contract being deprecated\n */\n event BalancerContractDeprecated(address indexed contractAddress);\n\n /**\n * @notice Emitted when an alias is added or updated.\n * @param contractAlias The alias name\n * @param contractAddress The address of the contract being deprecated\n */\n event ContractAliasUpdated(string indexed contractAlias, address indexed contractAddress);\n\n /**\n * @notice A contract has already been registered under the given address.\n * @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n * to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n * name => address => state mapping.\n *\n * @param contractType The contract type, provided for documentation purposes\n * @param contractAddress The address of the previously registered contract\n */\n error ContractAddressAlreadyRegistered(ContractType contractType, address contractAddress);\n\n /**\n * @notice A contract has already been registered under the given name.\n * @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n * different types, or the same name and different addresses.\n *\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract\n */\n error ContractNameAlreadyRegistered(ContractType contractType, string contractName);\n\n /**\n * @notice The proposed contract name has already been added as an alias.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractName The name of the previously registered contract\n * @param contractAddress The address of the previously registered contract\n */\n error ContractNameInUseAsAlias(string contractName, address contractAddress);\n\n /**\n * @notice The proposed alias has already been registered as a contract.\n * @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n * @param contractType The registered contract type, provided for documentation purposes\n * @param contractName The name of the previously registered contract (and proposed alias)\n */\n error ContractAliasInUseAsName(ContractType contractType, string contractName);\n\n /**\n * @notice Thrown when attempting to deregister a contract that was not previously registered.\n * @param contractName The name of the unregistered contract\n */\n error ContractNameNotRegistered(string contractName);\n\n /**\n * @notice An operation that requires a valid contract specified an unrecognized address.\n * @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n * registered contract.\n *\n * @param contractAddress The address of the contract that was not registered\n */\n error ContractAddressNotRegistered(address contractAddress);\n\n /**\n * @notice Contracts can only be deprecated once.\n * @param contractAddress The address of the previously deprecated contract\n */\n error ContractAlreadyDeprecated(address contractAddress);\n\n /// @notice Cannot register or deprecate contracts, or add an alias targeting the zero address.\n error ZeroContractAddress();\n\n /// @notice Cannot register (or deregister) a contract with an empty string as a name.\n error InvalidContractName();\n\n /// @notice Cannot add an empty string as an alias.\n error InvalidContractAlias();\n\n /**\n * @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n * (not blank). Governance must ensure this is called with valid information. Emits the\n * `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n * already in use.\n *\n * @param contractType The type of contract being registered\n * @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n * @param contractAddress The address of the contract\n */\n function registerBalancerContract(\n ContractType contractType,\n string memory contractName,\n address contractAddress\n ) external;\n\n /**\n * @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n * @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n * If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n * it, and register it again with the correct data. It must start with the name, as this is the registry key,\n * required for complete deletion.\n *\n * Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n * inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n * the correct address.\n *\n * @param contractName The name of the contract being deprecated (cannot be an alias)\n */\n function deregisterBalancerContract(string memory contractName) external;\n\n /**\n * @notice Deprecate an official Balancer contract.\n * @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n * address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n * enforced unique, so either the name or address could be specified in principle.\n *\n * @param contractAddress The address of the contract being deprecated\n */\n function deprecateBalancerContract(address contractAddress) external;\n\n /**\n * @notice Add an alias for a registered contract.\n * @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n * `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n * need to track specific versions. Once added, an alias can also be updated to point to a different address\n * (e.g., when migrating from the v2 to the v3 weighted pool).\n *\n * @param contractAlias An alternate name that can be used to fetch a contract address\n * @param existingContract The target address of the contract alias\n */\n function addOrUpdateBalancerContractAlias(string memory contractAlias, address existingContract) external;\n\n /**\n * @notice Determine whether an address is an official contract of the specified type.\n * @param contractType The type of contract\n * @param contractAddress The address of the contract\n * @return isActive True if the given address is a registered and active contract of the specified type\n */\n function isActiveBalancerContract(\n ContractType contractType,\n address contractAddress\n ) external view returns (bool isActive);\n\n /**\n * @notice Look up a registered contract by type and name.\n * @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n * (e.g., `WeightedPool`).\n *\n * @param contractType The type of the contract\n * @param contractName The name of the contract\n * @return contractAddress The address of the associated contract, if registered, or zero\n * @return isActive True if the contract was registered and not deprecated\n */\n function getBalancerContract(\n ContractType contractType,\n string memory contractName\n ) external view returns (address contractAddress, bool isActive);\n\n /**\n * @notice Look up complete information about a registered contract by address.\n * @param contractAddress The address of the associated contract\n * @return info ContractInfo struct corresponding to the address\n */\n function getBalancerContractInfo(address contractAddress) external view returns (ContractInfo memory info);\n\n /// @notice Returns `true` if the given address is an active contract under the ROUTER type.\n function isTrustedRouter(address router) external view returns (bool);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolRegisteredWithFeeController(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator yield fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract CommonAuthentication is Authentication {\n IVault private immutable _vault;\n\n /// @notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance.\n modifier onlySwapFeeManagerOrGovernance(address pool) {\n address roleAddress = _vault.getPoolRoleAccounts(pool).swapFeeManager;\n _ensureAuthenticatedByExclusiveRole(pool, roleAddress);\n _;\n }\n\n constructor(IVault vault, bytes32 actionIdDisambiguator) Authentication(actionIdDisambiguator) {\n _vault = vault;\n }\n\n function _getVault() internal view returns (IVault) {\n return _vault;\n }\n\n // Access control is delegated to the Authorizer in the `_canPerform` functions.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, account, where);\n }\n\n /// @dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0).\n function _ensureAuthenticatedByExclusiveRole(address where, address roleAccount) internal view {\n if (roleAccount == address(0)) {\n // Defer to governance if no role assigned.\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n } else if (msg.sender != roleAccount) {\n revert SenderNotAllowed();\n }\n }\n\n /// @dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive).\n function _ensureAuthenticatedByRole(address where, address roleAccount) internal view {\n // If the sender is not the delegated manager for the role, defer to governance.\n if (msg.sender != roleAccount) {\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n }\n // (else) if the sender is the delegated manager, proceed.\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(\n IVault vault_,\n uint256 initialGlobalSwapFeePercentage,\n uint256 initialGlobalYieldFeePercentage\n ) SingletonAuthentication(vault_) VaultGuard(vault_) {\n _setGlobalProtocolSwapFeePercentage(initialGlobalSwapFeePercentage);\n _setGlobalProtocolYieldFeePercentage(initialGlobalYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Pool Migration\n ***************************************************************************/\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n // On the first migration, these functions won't exist, as they were not included in the originally deployed\n // contract. This is ok, as the first time the contract will be migrated, there will be no pool creators.\n // In the event a pool that did have a pool creator was missed, the pool creator can simply set the fee\n // percentage again on the new controller. The fact that a pool has a pool creator cannot be lost, as this\n // is stored in the Vault on initial registration.\n try oldFeeController.getPoolCreatorSwapFeePercentage(pool) returns (uint256 poolCreatorSwapFeePercentage) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorSwapFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n try oldFeeController.getPoolCreatorYieldFeePercentage(pool) returns (uint256 poolCreatorYieldFeePercentage) {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorYieldFeePercentage;\n } catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n emit PoolRegisteredWithFeeController(pool, poolCreator, protocolFeeExempt);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external authenticate {\n _setGlobalProtocolSwapFeePercentage(newProtocolSwapFeePercentage);\n }\n\n function _setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) internal withValidSwapFee(newProtocolSwapFeePercentage) {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external authenticate {\n _setGlobalProtocolYieldFeePercentage(newProtocolYieldFeePercentage);\n }\n\n function _setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) internal withValidYieldFee(newProtocolYieldFeePercentage) {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"./CommonAuthentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is CommonAuthentication {\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) CommonAuthentication(vault, bytes32(uint256(uint160(address(this))))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _getVault();\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC20Permit} from \"../extensions/IERC20Permit.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n /**\n * @dev An operation with an ERC20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data);\n if (returndata.length != 0 && !abi.decode(returndata, (bool))) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n // and not revert is the subcall reverts.\n\n (bool success, bytes memory returndata) = address(token).call(data);\n return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\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 or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\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 function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\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 function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\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 /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n}\n"},"contracts/BalancerContractRegistryInitializer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport { IBasicAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\";\nimport {\n IBalancerContractRegistry,\n ContractType\n} from \"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\n\n// Associated with `20250221-balancer-registry-initializer`.\ncontract BalancerContractRegistryInitializer {\n IBalancerContractRegistry public immutable balancerContractRegistry;\n\n // IAuthorizer with interface for granting/revoking roles.\n IBasicAuthorizer internal immutable _authorizer;\n\n // Set to true when operation is complete.\n bool private _initialized;\n\n string[] private _routerNames;\n address[] private _routerAddresses;\n\n string[] private _poolFactoryNames;\n address[] private _poolFactoryAddresses;\n\n string[] private _aliasNames;\n address[] private _aliasAddresses;\n\n /// @notice The initialization can only be done once.\n error AlreadyInitialized();\n\n /// @notice The Vault passed in as a sanity check doesn't match the Vault associated with the registry.\n error VaultMismatch();\n\n constructor(\n IVault vault,\n IBalancerContractRegistry balancerContractRegistry_,\n string[] memory routerNames,\n address[] memory routerAddresses,\n string[] memory poolFactoryNames,\n address[] memory poolFactoryAddresses,\n string[] memory aliasNames,\n address[] memory aliasAddresses\n ) {\n InputHelpers.ensureInputLengthMatch(_routerNames.length, _routerAddresses.length);\n InputHelpers.ensureInputLengthMatch(_poolFactoryNames.length, _poolFactoryAddresses.length);\n InputHelpers.ensureInputLengthMatch(_aliasNames.length, _aliasAddresses.length);\n\n // Extract the Vault (also indirectly verifying the registry contract is valid).\n IVault registryVault = SingletonAuthentication(address(balancerContractRegistry_)).getVault();\n if (registryVault != vault) {\n revert VaultMismatch();\n }\n\n balancerContractRegistry = balancerContractRegistry_;\n\n _routerNames = routerNames;\n _routerAddresses = routerAddresses;\n _poolFactoryNames = poolFactoryNames;\n _poolFactoryAddresses = poolFactoryAddresses;\n _aliasNames = aliasNames;\n _aliasAddresses = aliasAddresses;\n\n _authorizer = IBasicAuthorizer(address(vault.getAuthorizer()));\n }\n\n function initializeBalancerContractRegistry() external {\n // Explicitly ensure this can only be called once.\n if (_initialized) {\n revert AlreadyInitialized();\n }\n\n _initialized = true;\n\n // Grant permissions to register contracts and add aliases.\n bytes32 registerContractRole = IAuthentication(address(balancerContractRegistry)).getActionId(\n IBalancerContractRegistry.registerBalancerContract.selector\n );\n bytes32 addAliasRole = IAuthentication(address(balancerContractRegistry)).getActionId(\n IBalancerContractRegistry.addOrUpdateBalancerContractAlias.selector\n );\n\n _authorizer.grantRole(registerContractRole, address(this));\n _authorizer.grantRole(addAliasRole, address(this));\n\n // Add Routers.\n for (uint256 i = 0; i < _routerNames.length; ++i) {\n balancerContractRegistry.registerBalancerContract(\n ContractType.ROUTER,\n _routerNames[i],\n _routerAddresses[i]\n );\n }\n\n // Add Pool Factories.\n for (uint256 i = 0; i < _poolFactoryNames.length; ++i) {\n balancerContractRegistry.registerBalancerContract(\n ContractType.POOL_FACTORY,\n _poolFactoryNames[i],\n _poolFactoryAddresses[i]\n );\n }\n\n // Add (pool factory) aliases.\n for (uint256 i = 0; i < _aliasNames.length; ++i) {\n balancerContractRegistry.addOrUpdateBalancerContractAlias(_aliasNames[i], _aliasAddresses[i]);\n }\n\n // Renounce all roles.\n _authorizer.renounceRole(registerContractRole, address(this));\n _authorizer.renounceRole(addAliasRole, address(this));\n\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n}\n"},"contracts/ProtocolFeeControllerMigration.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport { IBasicAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { PoolRoleAccounts, PoolConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\n/**\n * @notice Migrate to a ProtocolFeeController with extra events and infrastructure for future migrations.\n * @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n * initially turned off).\n *\n * After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools\n * are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible\n * there might be too many to migrate in a single call.\n *\n * The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could\n * be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator\n * system of v2 just yet.\n *\n * When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the\n * Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to\n * prevent premature termination in case multiple transactions are required to migrate all the pools.\n *\n * Associated with `20250221-protocol-fee-controller-migration` (fork test only).\n */\ncontract ProtocolFeeControllerMigration is ReentrancyGuardTransient, SingletonAuthentication {\n IProtocolFeeController public immutable oldFeeController;\n IProtocolFeeController public newFeeController;\n\n IVault public immutable vault;\n\n // IAuthorizer with interface for granting/revoking roles.\n IBasicAuthorizer internal immutable _authorizer;\n\n // Set when the operation is complete and all permissions have been renounced.\n bool internal _finalized;\n\n // Set after the global percentages have been transferred (on the first call to `migratePools`).\n bool internal _globalPercentagesMigrated;\n\n /**\n * @notice Attempt to deploy this contract with invalid parameters.\n * @dev ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both\n * the old and new controllers reference the same vault.\n */\n error InvalidFeeController();\n\n /// @notice Migration can only be performed once.\n error AlreadyMigrated();\n\n constructor(IVault _vault, IProtocolFeeController _newFeeController) SingletonAuthentication(_vault) {\n oldFeeController = _vault.getProtocolFeeController();\n\n // Ensure valid fee controllers. Also ensure that we are not trying to operate on the current fee controller.\n if (_newFeeController.vault() != _vault || _newFeeController == oldFeeController) {\n revert InvalidFeeController();\n }\n\n vault = _vault;\n newFeeController = _newFeeController;\n\n _authorizer = IBasicAuthorizer(address(vault.getAuthorizer()));\n }\n\n /**\n * @notice Check whether migration has been completed.\n * @dev It can only be done once.\n * @return isComplete True if `finalizeMigration` has been called.\n */\n function isMigrationComplete() public view returns (bool) {\n return _finalized;\n }\n\n /**\n * @notice Migrate pools from the old fee controller to the new one.\n * @dev This can be called multiple times, if there are too many pools for a single transaction. Note that the\n * first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\n *\n * @param pools The set of pools to be migrated in this call\n */\n function migratePools(address[] memory pools) external virtual nonReentrant {\n if (isMigrationComplete()) {\n revert AlreadyMigrated();\n }\n\n // Migrate the global percentages only once, before the first set of pools.\n if (_globalPercentagesMigrated == false) {\n _globalPercentagesMigrated = true;\n\n _migrateGlobalPercentages();\n }\n\n // This more complex migration allows for pool creators and overrides, and uses the new features in the second\n // deployment of the `ProtocolFeeController`.\n //\n // At the end of this process, governance must still withdraw any leftover protocol fees from the old\n // controller (i.e., that have been collected but not withdrawn). Pool creators likewise would still need to\n // withdraw any leftover pool creator fees from the old controller.\n for (uint256 i = 0; i < pools.length; ++i) {\n // This function is not in the public interface.\n ProtocolFeeController(address(newFeeController)).migratePool(pools[i]);\n }\n }\n\n function finalizeMigration() external virtual authenticate {\n if (isMigrationComplete()) {\n revert AlreadyMigrated();\n }\n\n _finalized = true;\n\n // Update the fee controller in the Vault.\n _migrateFeeController();\n\n // Revoke all permissions.\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n\n function _migrateGlobalPercentages() internal {\n // Grant global fee percentage permissions to set on new controller.\n bytes32 swapFeeRole = IAuthentication(address(newFeeController)).getActionId(\n IProtocolFeeController.setGlobalProtocolSwapFeePercentage.selector\n );\n\n bytes32 yieldFeeRole = IAuthentication(address(newFeeController)).getActionId(\n IProtocolFeeController.setGlobalProtocolYieldFeePercentage.selector\n );\n\n _authorizer.grantRole(swapFeeRole, address(this));\n _authorizer.grantRole(yieldFeeRole, address(this));\n\n // Copy percentages to new controller.\n uint256 globalSwapFeePercentage = oldFeeController.getGlobalProtocolSwapFeePercentage();\n uint256 globalYieldFeePercentage = oldFeeController.getGlobalProtocolYieldFeePercentage();\n\n newFeeController.setGlobalProtocolSwapFeePercentage(globalSwapFeePercentage);\n newFeeController.setGlobalProtocolYieldFeePercentage(globalYieldFeePercentage);\n\n // Revoke permissions.\n _authorizer.renounceRole(swapFeeRole, address(this));\n _authorizer.renounceRole(yieldFeeRole, address(this));\n }\n\n function _migrateFeeController() internal {\n bytes32 setFeeControllerRole = IAuthentication(address(vault)).getActionId(\n IVaultAdmin.setProtocolFeeController.selector\n );\n\n _authorizer.grantRole(setFeeControllerRole, address(this));\n\n vault.setProtocolFeeController(newFeeController);\n\n _authorizer.renounceRole(setFeeControllerRole, address(this));\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","exportedSymbols":{"IAuthorizer":[251],"IBasicAuthorizer":[32]},"id":33,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"../vault/IAuthorizer.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33,"sourceUnit":252,"src":"72:55:0","symbolAliases":[{"foreign":{"id":2,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"81:11:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4,"name":"IAuthorizer","nameLocations":["159:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":251,"src":"159:11:0"},"id":5,"nodeType":"InheritanceSpecifier","src":"159:11:0"}],"canonicalName":"IBasicAuthorizer","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":32,"linearizedBaseContracts":[32,251],"name":"IBasicAuthorizer","nameLocation":"139:16:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a217fddf","id":10,"implemented":false,"kind":"function","modifiers":[],"name":"DEFAULT_ADMIN_ROLE","nameLocation":"239:18:0","nodeType":"FunctionDefinition","parameters":{"id":6,"nodeType":"ParameterList","parameters":[],"src":"257:2:0"},"returnParameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10,"src":"283:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7,"name":"bytes32","nodeType":"ElementaryTypeName","src":"283:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"282:9:0"},"scope":32,"src":"230:62:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f2ff15d","id":17,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"307:9:0","nodeType":"FunctionDefinition","parameters":{"id":15,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12,"mutability":"mutable","name":"role","nameLocation":"325:4:0","nodeType":"VariableDeclaration","scope":17,"src":"317:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11,"name":"bytes32","nodeType":"ElementaryTypeName","src":"317:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14,"mutability":"mutable","name":"account","nameLocation":"339:7:0","nodeType":"VariableDeclaration","scope":17,"src":"331:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13,"name":"address","nodeType":"ElementaryTypeName","src":"331:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"316:31:0"},"returnParameters":{"id":16,"nodeType":"ParameterList","parameters":[],"src":"356:0:0"},"scope":32,"src":"298:59:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d547741f","id":24,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"372:10:0","nodeType":"FunctionDefinition","parameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19,"mutability":"mutable","name":"role","nameLocation":"391:4:0","nodeType":"VariableDeclaration","scope":24,"src":"383:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18,"name":"bytes32","nodeType":"ElementaryTypeName","src":"383:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":21,"mutability":"mutable","name":"account","nameLocation":"405:7:0","nodeType":"VariableDeclaration","scope":24,"src":"397:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20,"name":"address","nodeType":"ElementaryTypeName","src":"397:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"382:31:0"},"returnParameters":{"id":23,"nodeType":"ParameterList","parameters":[],"src":"422:0:0"},"scope":32,"src":"363:60:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36568abe","id":31,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"438:12:0","nodeType":"FunctionDefinition","parameters":{"id":29,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26,"mutability":"mutable","name":"role","nameLocation":"459:4:0","nodeType":"VariableDeclaration","scope":31,"src":"451:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25,"name":"bytes32","nodeType":"ElementaryTypeName","src":"451:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28,"mutability":"mutable","name":"account","nameLocation":"473:7:0","nodeType":"VariableDeclaration","scope":31,"src":"465:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27,"name":"address","nodeType":"ElementaryTypeName","src":"465:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"450:31:0"},"returnParameters":{"id":30,"nodeType":"ParameterList","parameters":[],"src":"490:0:0"},"scope":32,"src":"429:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":33,"src":"129:364:0","usedErrors":[],"usedEvents":[]}],"src":"46:448:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[47]},"id":48,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":34,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":35,"nodeType":"StructuredDocumentation","src":"72:77:1","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":47,"linearizedBaseContracts":[47],"name":"IAuthentication","nameLocation":"159:15:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":36,"nodeType":"StructuredDocumentation","src":"181:67:1","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":38,"name":"SenderNotAllowed","nameLocation":"259:16:1","nodeType":"ErrorDefinition","parameters":{"id":37,"nodeType":"ParameterList","parameters":[],"src":"275:2:1"},"src":"253:25:1"},{"documentation":{"id":39,"nodeType":"StructuredDocumentation","src":"284:237:1","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":46,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:1","nodeType":"FunctionDefinition","parameters":{"id":42,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41,"mutability":"mutable","name":"selector","nameLocation":"554:8:1","nodeType":"VariableDeclaration","scope":46,"src":"547:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":40,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:1"},"returnParameters":{"id":45,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44,"mutability":"mutable","name":"actionId","nameLocation":"595:8:1","nodeType":"VariableDeclaration","scope":46,"src":"587:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:1"},"scope":47,"src":"526:79:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48,"src":"149:458:1","usedErrors":[38],"usedEvents":[]}],"src":"46:562:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[57]},"id":58,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":49,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":50,"nodeType":"StructuredDocumentation","src":"72:56:2","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":57,"linearizedBaseContracts":[57],"name":"IRateProvider","nameLocation":"138:13:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":51,"nodeType":"StructuredDocumentation","src":"158:573:2","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":56,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:2","nodeType":"FunctionDefinition","parameters":{"id":52,"nodeType":"ParameterList","parameters":[],"src":"752:2:2"},"returnParameters":{"id":55,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54,"mutability":"mutable","name":"rate","nameLocation":"786:4:2","nodeType":"VariableDeclaration","scope":56,"src":"778:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:2"},"scope":57,"src":"736:56:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":58,"src":"128:666:2","usedErrors":[],"usedEvents":[]}],"src":"46:749:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","exportedSymbols":{"ContractType":[66],"IBalancerContractRegistry":[235]},"id":236,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":59,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"canonicalName":"ContractType","documentation":{"id":60,"nodeType":"StructuredDocumentation","src":"72:61:3","text":"@notice Registered contracts must be one of these types."},"id":66,"members":[{"id":61,"name":"OTHER","nameLocation":"157:5:3","nodeType":"EnumValue","src":"157:5:3"},{"id":62,"name":"POOL_FACTORY","nameLocation":"255:12:3","nodeType":"EnumValue","src":"255:12:3"},{"id":63,"name":"ROUTER","nameLocation":"273:6:3","nodeType":"EnumValue","src":"273:6:3"},{"id":64,"name":"HOOK","nameLocation":"285:4:3","nodeType":"EnumValue","src":"285:4:3"},{"id":65,"name":"ERC4626","nameLocation":"295:7:3","nodeType":"EnumValue","src":"295:7:3"}],"name":"ContractType","nameLocation":"138:12:3","nodeType":"EnumDefinition","src":"133:171:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IBalancerContractRegistry","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":235,"linearizedBaseContracts":[235],"name":"IBalancerContractRegistry","nameLocation":"316:25:3","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBalancerContractRegistry.ContractInfo","documentation":{"id":67,"nodeType":"StructuredDocumentation","src":"348:887:3","text":" @notice Store the state of a registered Balancer contract.\n @dev Contracts can be deprecated, so we store an active flag indicating the status. With two flags, we can\n differentiate between deprecated and non-existent. The same contract address can have multiple names, but\n only one type. If a contract is legitimately multiple types (e.g., a hook that also acts as a router), set\n the type to its \"primary\" function: hook, in this case. The \"Other\" type is intended as a catch-all for\n things that don't find into the standard types (e.g., helper contracts).\n @param contractType The type of contract (e.g., Router or Hook)\n @param isRegistered This flag indicates whether there is an entry for the associated address\n @param isActive If there is an entry, this flag indicates whether it is active or deprecated"},"id":75,"members":[{"constant":false,"id":70,"mutability":"mutable","name":"contractType","nameLocation":"1283:12:3","nodeType":"VariableDeclaration","scope":75,"src":"1270:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":69,"nodeType":"UserDefinedTypeName","pathNode":{"id":68,"name":"ContractType","nameLocations":["1270:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"1270:12:3"},"referencedDeclaration":66,"src":"1270:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":72,"mutability":"mutable","name":"isRegistered","nameLocation":"1310:12:3","nodeType":"VariableDeclaration","scope":75,"src":"1305:17:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":71,"name":"bool","nodeType":"ElementaryTypeName","src":"1305:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":74,"mutability":"mutable","name":"isActive","nameLocation":"1337:8:3","nodeType":"VariableDeclaration","scope":75,"src":"1332:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":73,"name":"bool","nodeType":"ElementaryTypeName","src":"1332:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ContractInfo","nameLocation":"1247:12:3","nodeType":"StructDefinition","scope":235,"src":"1240:112:3","visibility":"public"},{"anonymous":false,"documentation":{"id":76,"nodeType":"StructuredDocumentation","src":"1358:278:3","text":" @notice Emitted when a new contract is registered.\n @param contractType The type of contract being registered\n @param contractName The name of the contract being registered\n @param contractAddress The address of the contract being registered"},"eventSelector":"b12ed936cf481273b3ed037dc706d110c49bd7ba6743e67082cd772a6e9102e2","id":85,"name":"BalancerContractRegistered","nameLocation":"1647:26:3","nodeType":"EventDefinition","parameters":{"id":84,"nodeType":"ParameterList","parameters":[{"constant":false,"id":79,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"1704:12:3","nodeType":"VariableDeclaration","scope":85,"src":"1683:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":78,"nodeType":"UserDefinedTypeName","pathNode":{"id":77,"name":"ContractType","nameLocations":["1683:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"1683:12:3"},"referencedDeclaration":66,"src":"1683:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":81,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"1741:12:3","nodeType":"VariableDeclaration","scope":85,"src":"1726:27:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":80,"name":"string","nodeType":"ElementaryTypeName","src":"1726:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":83,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"1779:15:3","nodeType":"VariableDeclaration","scope":85,"src":"1763:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":82,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1673:127:3"},"src":"1641:160:3"},{"anonymous":false,"documentation":{"id":86,"nodeType":"StructuredDocumentation","src":"1807:296:3","text":" @notice Emitted when a new contract is deregistered (deleted).\n @param contractType The type of contract being deregistered\n @param contractName The name of the contract being deregistered\n @param contractAddress The address of the contract being deregistered"},"eventSelector":"fa2e7bfe3791287aa74ffe867372b78e61b60e0516978c4952f83f7416fafb7c","id":95,"name":"BalancerContractDeregistered","nameLocation":"2114:28:3","nodeType":"EventDefinition","parameters":{"id":94,"nodeType":"ParameterList","parameters":[{"constant":false,"id":89,"indexed":true,"mutability":"mutable","name":"contractType","nameLocation":"2173:12:3","nodeType":"VariableDeclaration","scope":95,"src":"2152:33:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":88,"nodeType":"UserDefinedTypeName","pathNode":{"id":87,"name":"ContractType","nameLocations":["2152:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"2152:12:3"},"referencedDeclaration":66,"src":"2152:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":91,"indexed":true,"mutability":"mutable","name":"contractName","nameLocation":"2210:12:3","nodeType":"VariableDeclaration","scope":95,"src":"2195:27:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":90,"name":"string","nodeType":"ElementaryTypeName","src":"2195:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":93,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2248:15:3","nodeType":"VariableDeclaration","scope":95,"src":"2232:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":92,"name":"address","nodeType":"ElementaryTypeName","src":"2232:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2142:127:3"},"src":"2108:162:3"},{"anonymous":false,"documentation":{"id":96,"nodeType":"StructuredDocumentation","src":"2276:203:3","text":" @notice Emitted when a registered contract is deprecated.\n @dev This sets the `isActive` flag to false.\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"07b81cace396ea12f83465895486ac006cd17917e41b9759ad5e663404f1497b","id":100,"name":"BalancerContractDeprecated","nameLocation":"2490:26:3","nodeType":"EventDefinition","parameters":{"id":99,"nodeType":"ParameterList","parameters":[{"constant":false,"id":98,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2533:15:3","nodeType":"VariableDeclaration","scope":100,"src":"2517:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":97,"name":"address","nodeType":"ElementaryTypeName","src":"2517:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2516:33:3"},"src":"2484:66:3"},{"anonymous":false,"documentation":{"id":101,"nodeType":"StructuredDocumentation","src":"2556:187:3","text":" @notice Emitted when an alias is added or updated.\n @param contractAlias The alias name\n @param contractAddress The address of the contract being deprecated"},"eventSelector":"06618a6a1a6a413a59097e7c362ee8260afae8f07bd94bc0938e573058465483","id":107,"name":"ContractAliasUpdated","nameLocation":"2754:20:3","nodeType":"EventDefinition","parameters":{"id":106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":103,"indexed":true,"mutability":"mutable","name":"contractAlias","nameLocation":"2790:13:3","nodeType":"VariableDeclaration","scope":107,"src":"2775:28:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":102,"name":"string","nodeType":"ElementaryTypeName","src":"2775:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":105,"indexed":true,"mutability":"mutable","name":"contractAddress","nameLocation":"2821:15:3","nodeType":"VariableDeclaration","scope":107,"src":"2805:31:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":104,"name":"address","nodeType":"ElementaryTypeName","src":"2805:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2774:63:3"},"src":"2748:90:3"},{"documentation":{"id":108,"nodeType":"StructuredDocumentation","src":"2844:531:3","text":" @notice A contract has already been registered under the given address.\n @dev Both names and addresses must be unique in the primary registration mapping. Though there are two mappings\n to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent\n name => address => state mapping.\n @param contractType The contract type, provided for documentation purposes\n @param contractAddress The address of the previously registered contract"},"errorSelector":"25a14e0c","id":115,"name":"ContractAddressAlreadyRegistered","nameLocation":"3386:32:3","nodeType":"ErrorDefinition","parameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":111,"mutability":"mutable","name":"contractType","nameLocation":"3432:12:3","nodeType":"VariableDeclaration","scope":115,"src":"3419:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":110,"nodeType":"UserDefinedTypeName","pathNode":{"id":109,"name":"ContractType","nameLocations":["3419:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"3419:12:3"},"referencedDeclaration":66,"src":"3419:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":113,"mutability":"mutable","name":"contractAddress","nameLocation":"3454:15:3","nodeType":"VariableDeclaration","scope":115,"src":"3446:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":112,"name":"address","nodeType":"ElementaryTypeName","src":"3446:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3418:52:3"},"src":"3380:91:3"},{"documentation":{"id":116,"nodeType":"StructuredDocumentation","src":"3477:439:3","text":" @notice A contract has already been registered under the given name.\n @dev Note that names must be unique; it is not possible to register two contracts with the same name and\n different types, or the same name and different addresses.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract"},"errorSelector":"a1e69ed3","id":123,"name":"ContractNameAlreadyRegistered","nameLocation":"3927:29:3","nodeType":"ErrorDefinition","parameters":{"id":122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":119,"mutability":"mutable","name":"contractType","nameLocation":"3970:12:3","nodeType":"VariableDeclaration","scope":123,"src":"3957:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":118,"nodeType":"UserDefinedTypeName","pathNode":{"id":117,"name":"ContractType","nameLocations":["3957:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"3957:12:3"},"referencedDeclaration":66,"src":"3957:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":121,"mutability":"mutable","name":"contractName","nameLocation":"3991:12:3","nodeType":"VariableDeclaration","scope":123,"src":"3984:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":120,"name":"string","nodeType":"ElementaryTypeName","src":"3984:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3956:48:3"},"src":"3921:84:3"},{"documentation":{"id":124,"nodeType":"StructuredDocumentation","src":"4011:338:3","text":" @notice The proposed contract name has already been added as an alias.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractName The name of the previously registered contract\n @param contractAddress The address of the previously registered contract"},"errorSelector":"6d4f9990","id":130,"name":"ContractNameInUseAsAlias","nameLocation":"4360:24:3","nodeType":"ErrorDefinition","parameters":{"id":129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":126,"mutability":"mutable","name":"contractName","nameLocation":"4392:12:3","nodeType":"VariableDeclaration","scope":130,"src":"4385:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":125,"name":"string","nodeType":"ElementaryTypeName","src":"4385:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":128,"mutability":"mutable","name":"contractAddress","nameLocation":"4414:15:3","nodeType":"VariableDeclaration","scope":130,"src":"4406:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":127,"name":"address","nodeType":"ElementaryTypeName","src":"4406:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4384:46:3"},"src":"4354:77:3"},{"documentation":{"id":131,"nodeType":"StructuredDocumentation","src":"4437:371:3","text":" @notice The proposed alias has already been registered as a contract.\n @dev This could lead to inconsistent (or at least redundant) internal state if allowed.\n @param contractType The registered contract type, provided for documentation purposes\n @param contractName The name of the previously registered contract (and proposed alias)"},"errorSelector":"4466cf0c","id":138,"name":"ContractAliasInUseAsName","nameLocation":"4819:24:3","nodeType":"ErrorDefinition","parameters":{"id":137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":134,"mutability":"mutable","name":"contractType","nameLocation":"4857:12:3","nodeType":"VariableDeclaration","scope":138,"src":"4844:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":133,"nodeType":"UserDefinedTypeName","pathNode":{"id":132,"name":"ContractType","nameLocations":["4844:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"4844:12:3"},"referencedDeclaration":66,"src":"4844:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":136,"mutability":"mutable","name":"contractName","nameLocation":"4878:12:3","nodeType":"VariableDeclaration","scope":138,"src":"4871:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":135,"name":"string","nodeType":"ElementaryTypeName","src":"4871:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4843:48:3"},"src":"4813:79:3"},{"documentation":{"id":139,"nodeType":"StructuredDocumentation","src":"4898:175:3","text":" @notice Thrown when attempting to deregister a contract that was not previously registered.\n @param contractName The name of the unregistered contract"},"errorSelector":"cd3599f9","id":143,"name":"ContractNameNotRegistered","nameLocation":"5084:25:3","nodeType":"ErrorDefinition","parameters":{"id":142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":141,"mutability":"mutable","name":"contractName","nameLocation":"5117:12:3","nodeType":"VariableDeclaration","scope":143,"src":"5110:19:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":140,"name":"string","nodeType":"ElementaryTypeName","src":"5110:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5109:21:3"},"src":"5078:53:3"},{"documentation":{"id":144,"nodeType":"StructuredDocumentation","src":"5137:329:3","text":" @notice An operation that requires a valid contract specified an unrecognized address.\n @dev A contract being deprecated was never registered, or the target of an alias isn't a previously\n registered contract.\n @param contractAddress The address of the contract that was not registered"},"errorSelector":"f5b5d364","id":148,"name":"ContractAddressNotRegistered","nameLocation":"5477:28:3","nodeType":"ErrorDefinition","parameters":{"id":147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":146,"mutability":"mutable","name":"contractAddress","nameLocation":"5514:15:3","nodeType":"VariableDeclaration","scope":148,"src":"5506:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":145,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5505:25:3"},"src":"5471:60:3"},{"documentation":{"id":149,"nodeType":"StructuredDocumentation","src":"5537:145:3","text":" @notice Contracts can only be deprecated once.\n @param contractAddress The address of the previously deprecated contract"},"errorSelector":"1f118c35","id":153,"name":"ContractAlreadyDeprecated","nameLocation":"5693:25:3","nodeType":"ErrorDefinition","parameters":{"id":152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":151,"mutability":"mutable","name":"contractAddress","nameLocation":"5727:15:3","nodeType":"VariableDeclaration","scope":153,"src":"5719:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":150,"name":"address","nodeType":"ElementaryTypeName","src":"5719:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5718:25:3"},"src":"5687:57:3"},{"documentation":{"id":154,"nodeType":"StructuredDocumentation","src":"5750:95:3","text":"@notice Cannot register or deprecate contracts, or add an alias targeting the zero address."},"errorSelector":"b4d92c53","id":156,"name":"ZeroContractAddress","nameLocation":"5856:19:3","nodeType":"ErrorDefinition","parameters":{"id":155,"nodeType":"ParameterList","parameters":[],"src":"5875:2:3"},"src":"5850:28:3"},{"documentation":{"id":157,"nodeType":"StructuredDocumentation","src":"5884:86:3","text":"@notice Cannot register (or deregister) a contract with an empty string as a name."},"errorSelector":"830c907e","id":159,"name":"InvalidContractName","nameLocation":"5981:19:3","nodeType":"ErrorDefinition","parameters":{"id":158,"nodeType":"ParameterList","parameters":[],"src":"6000:2:3"},"src":"5975:28:3"},{"documentation":{"id":160,"nodeType":"StructuredDocumentation","src":"6009:51:3","text":"@notice Cannot add an empty string as an alias."},"errorSelector":"907f9fd9","id":162,"name":"InvalidContractAlias","nameLocation":"6071:20:3","nodeType":"ErrorDefinition","parameters":{"id":161,"nodeType":"ParameterList","parameters":[],"src":"6091:2:3"},"src":"6065:29:3"},{"documentation":{"id":163,"nodeType":"StructuredDocumentation","src":"6100:711:3","text":" @notice Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and does only basic validation of the address (non-zero) and the name\n (not blank). Governance must ensure this is called with valid information. Emits the\n `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or\n already in use.\n @param contractType The type of contract being registered\n @param contractName A text description of the contract, usually the deployed version (e.g., \"v3-pool-weighted\")\n @param contractAddress The address of the contract"},"functionSelector":"e0376ab4","id":173,"implemented":false,"kind":"function","modifiers":[],"name":"registerBalancerContract","nameLocation":"6825:24:3","nodeType":"FunctionDefinition","parameters":{"id":171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":166,"mutability":"mutable","name":"contractType","nameLocation":"6872:12:3","nodeType":"VariableDeclaration","scope":173,"src":"6859:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":165,"nodeType":"UserDefinedTypeName","pathNode":{"id":164,"name":"ContractType","nameLocations":["6859:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"6859:12:3"},"referencedDeclaration":66,"src":"6859:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":168,"mutability":"mutable","name":"contractName","nameLocation":"6908:12:3","nodeType":"VariableDeclaration","scope":173,"src":"6894:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":167,"name":"string","nodeType":"ElementaryTypeName","src":"6894:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":170,"mutability":"mutable","name":"contractAddress","nameLocation":"6938:15:3","nodeType":"VariableDeclaration","scope":173,"src":"6930:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":169,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6849:110:3"},"returnParameters":{"id":172,"nodeType":"ParameterList","parameters":[],"src":"6968:0:3"},"scope":235,"src":"6816:153:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":174,"nodeType":"StructuredDocumentation","src":"6975:878:3","text":" @notice Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\n @dev This is a permissioned function, and makes it possible to correct errors without complex update logic.\n If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete\n it, and register it again with the correct data. It must start with the name, as this is the registry key,\n required for complete deletion.\n Note that there might still be an alias targeting the address being deleted, but accessing it will just return\n inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to\n the correct address.\n @param contractName The name of the contract being deprecated (cannot be an alias)"},"functionSelector":"c7f90793","id":179,"implemented":false,"kind":"function","modifiers":[],"name":"deregisterBalancerContract","nameLocation":"7867:26:3","nodeType":"FunctionDefinition","parameters":{"id":177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":176,"mutability":"mutable","name":"contractName","nameLocation":"7908:12:3","nodeType":"VariableDeclaration","scope":179,"src":"7894:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":175,"name":"string","nodeType":"ElementaryTypeName","src":"7894:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7893:28:3"},"returnParameters":{"id":178,"nodeType":"ParameterList","parameters":[],"src":"7930:0:3"},"scope":235,"src":"7858:73:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":180,"nodeType":"StructuredDocumentation","src":"7937:472:3","text":" @notice Deprecate an official Balancer contract.\n @dev This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the\n address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are\n enforced unique, so either the name or address could be specified in principle.\n @param contractAddress The address of the contract being deprecated"},"functionSelector":"44969a9c","id":185,"implemented":false,"kind":"function","modifiers":[],"name":"deprecateBalancerContract","nameLocation":"8423:25:3","nodeType":"FunctionDefinition","parameters":{"id":183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":182,"mutability":"mutable","name":"contractAddress","nameLocation":"8457:15:3","nodeType":"VariableDeclaration","scope":185,"src":"8449:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":181,"name":"address","nodeType":"ElementaryTypeName","src":"8449:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8448:25:3"},"returnParameters":{"id":184,"nodeType":"ParameterList","parameters":[],"src":"8482:0:3"},"scope":235,"src":"8414:69:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":186,"nodeType":"StructuredDocumentation","src":"8489:650:3","text":" @notice Add an alias for a registered contract.\n @dev This is a permissioned function to support querying by a contract alias. For instance, we might create a\n `WeightedPool` alias meaning the \"latest\" version of the `WeightedPoolFactory`, so that off-chain users don't\n need to track specific versions. Once added, an alias can also be updated to point to a different address\n (e.g., when migrating from the v2 to the v3 weighted pool).\n @param contractAlias An alternate name that can be used to fetch a contract address\n @param existingContract The target address of the contract alias"},"functionSelector":"2967af96","id":193,"implemented":false,"kind":"function","modifiers":[],"name":"addOrUpdateBalancerContractAlias","nameLocation":"9153:32:3","nodeType":"FunctionDefinition","parameters":{"id":191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":188,"mutability":"mutable","name":"contractAlias","nameLocation":"9200:13:3","nodeType":"VariableDeclaration","scope":193,"src":"9186:27:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":187,"name":"string","nodeType":"ElementaryTypeName","src":"9186:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":190,"mutability":"mutable","name":"existingContract","nameLocation":"9223:16:3","nodeType":"VariableDeclaration","scope":193,"src":"9215:24:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":189,"name":"address","nodeType":"ElementaryTypeName","src":"9215:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9185:55:3"},"returnParameters":{"id":192,"nodeType":"ParameterList","parameters":[],"src":"9249:0:3"},"scope":235,"src":"9144:106:3","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":194,"nodeType":"StructuredDocumentation","src":"9256:316:3","text":" @notice Determine whether an address is an official contract of the specified type.\n @param contractType The type of contract\n @param contractAddress The address of the contract\n @return isActive True if the given address is a registered and active contract of the specified type"},"functionSelector":"ae2733a4","id":204,"implemented":false,"kind":"function","modifiers":[],"name":"isActiveBalancerContract","nameLocation":"9586:24:3","nodeType":"FunctionDefinition","parameters":{"id":200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":197,"mutability":"mutable","name":"contractType","nameLocation":"9633:12:3","nodeType":"VariableDeclaration","scope":204,"src":"9620:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":196,"nodeType":"UserDefinedTypeName","pathNode":{"id":195,"name":"ContractType","nameLocations":["9620:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"9620:12:3"},"referencedDeclaration":66,"src":"9620:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":199,"mutability":"mutable","name":"contractAddress","nameLocation":"9663:15:3","nodeType":"VariableDeclaration","scope":204,"src":"9655:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":198,"name":"address","nodeType":"ElementaryTypeName","src":"9655:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9610:74:3"},"returnParameters":{"id":203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":202,"mutability":"mutable","name":"isActive","nameLocation":"9713:8:3","nodeType":"VariableDeclaration","scope":204,"src":"9708:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":201,"name":"bool","nodeType":"ElementaryTypeName","src":"9708:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9707:15:3"},"scope":235,"src":"9577:146:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":205,"nodeType":"StructuredDocumentation","src":"9729:496:3","text":" @notice Look up a registered contract by type and name.\n @dev This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias\n (e.g., `WeightedPool`).\n @param contractType The type of the contract\n @param contractName The name of the contract\n @return contractAddress The address of the associated contract, if registered, or zero\n @return isActive True if the contract was registered and not deprecated"},"functionSelector":"41d8c0bb","id":217,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContract","nameLocation":"10239:19:3","nodeType":"FunctionDefinition","parameters":{"id":211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":208,"mutability":"mutable","name":"contractType","nameLocation":"10281:12:3","nodeType":"VariableDeclaration","scope":217,"src":"10268:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},"typeName":{"id":207,"nodeType":"UserDefinedTypeName","pathNode":{"id":206,"name":"ContractType","nameLocations":["10268:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":66,"src":"10268:12:3"},"referencedDeclaration":66,"src":"10268:12:3","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},"visibility":"internal"},{"constant":false,"id":210,"mutability":"mutable","name":"contractName","nameLocation":"10317:12:3","nodeType":"VariableDeclaration","scope":217,"src":"10303:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":209,"name":"string","nodeType":"ElementaryTypeName","src":"10303:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10258:77:3"},"returnParameters":{"id":216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":213,"mutability":"mutable","name":"contractAddress","nameLocation":"10367:15:3","nodeType":"VariableDeclaration","scope":217,"src":"10359:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":212,"name":"address","nodeType":"ElementaryTypeName","src":"10359:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":215,"mutability":"mutable","name":"isActive","nameLocation":"10389:8:3","nodeType":"VariableDeclaration","scope":217,"src":"10384:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":214,"name":"bool","nodeType":"ElementaryTypeName","src":"10384:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10358:40:3"},"scope":235,"src":"10230:169:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":218,"nodeType":"StructuredDocumentation","src":"10405:233:3","text":" @notice Look up complete information about a registered contract by address.\n @param contractAddress The address of the associated contract\n @return info ContractInfo struct corresponding to the address"},"functionSelector":"8554c327","id":226,"implemented":false,"kind":"function","modifiers":[],"name":"getBalancerContractInfo","nameLocation":"10652:23:3","nodeType":"FunctionDefinition","parameters":{"id":221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":220,"mutability":"mutable","name":"contractAddress","nameLocation":"10684:15:3","nodeType":"VariableDeclaration","scope":226,"src":"10676:23:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":219,"name":"address","nodeType":"ElementaryTypeName","src":"10676:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10675:25:3"},"returnParameters":{"id":225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":224,"mutability":"mutable","name":"info","nameLocation":"10744:4:3","nodeType":"VariableDeclaration","scope":226,"src":"10724:24:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$75_memory_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"},"typeName":{"id":223,"nodeType":"UserDefinedTypeName","pathNode":{"id":222,"name":"ContractInfo","nameLocations":["10724:12:3"],"nodeType":"IdentifierPath","referencedDeclaration":75,"src":"10724:12:3"},"referencedDeclaration":75,"src":"10724:12:3","typeDescriptions":{"typeIdentifier":"t_struct$_ContractInfo_$75_storage_ptr","typeString":"struct IBalancerContractRegistry.ContractInfo"}},"visibility":"internal"}],"src":"10723:26:3"},"scope":235,"src":"10643:107:3","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":227,"nodeType":"StructuredDocumentation","src":"10756:92:3","text":"@notice Returns `true` if the given address is an active contract under the ROUTER type."},"functionSelector":"264e97e0","id":234,"implemented":false,"kind":"function","modifiers":[],"name":"isTrustedRouter","nameLocation":"10862:15:3","nodeType":"FunctionDefinition","parameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":229,"mutability":"mutable","name":"router","nameLocation":"10886:6:3","nodeType":"VariableDeclaration","scope":234,"src":"10878:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":228,"name":"address","nodeType":"ElementaryTypeName","src":"10878:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10877:16:3"},"returnParameters":{"id":233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":232,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":234,"src":"10917:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":231,"name":"bool","nodeType":"ElementaryTypeName","src":"10917:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10916:6:3"},"scope":235,"src":"10853:70:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":236,"src":"306:10619:3","usedErrors":[115,123,130,138,143,148,153,156,159,162],"usedEvents":[85,95,100,107]}],"src":"46:10880:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[251]},"id":252,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":237,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":238,"nodeType":"StructuredDocumentation","src":"72:56:4","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":251,"linearizedBaseContracts":[251],"name":"IAuthorizer","nameLocation":"138:11:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":239,"nodeType":"StructuredDocumentation","src":"156:354:4","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":250,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:4","nodeType":"FunctionDefinition","parameters":{"id":246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":241,"mutability":"mutable","name":"actionId","nameLocation":"543:8:4","nodeType":"VariableDeclaration","scope":250,"src":"535:16:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":240,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:4","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":243,"mutability":"mutable","name":"account","nameLocation":"561:7:4","nodeType":"VariableDeclaration","scope":250,"src":"553:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":242,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":245,"mutability":"mutable","name":"where","nameLocation":"578:5:4","nodeType":"VariableDeclaration","scope":250,"src":"570:13:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":244,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:4"},"returnParameters":{"id":249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":248,"mutability":"mutable","name":"success","nameLocation":"613:7:4","nodeType":"VariableDeclaration","scope":250,"src":"608:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":247,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:4"},"scope":251,"src":"515:107:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":252,"src":"128:496:4","usedErrors":[],"usedEvents":[]}],"src":"46:579:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[2525],"AfterSwapParams":[2519],"HookFlags":[2345],"IHooks":[453],"LiquidityManagement":[2298],"PoolSwapParams":[2490],"RemoveLiquidityKind":[2546],"SwapKind":[2453],"TokenConfig":[2412]},"id":454,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":253,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":262,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":454,"sourceUnit":2590,"src":"289:193:5","symbolAliases":[{"foreign":{"id":254,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2412,"src":"302:11:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":255,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2298,"src":"319:19:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":256,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2490,"src":"344:14:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":257,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2519,"src":"364:15:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":258,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2345,"src":"385:9:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":259,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2525,"src":"400:16:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":260,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2546,"src":"422:19:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":261,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2453,"src":"447:8:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":263,"nodeType":"StructuredDocumentation","src":"484:490:5","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":453,"linearizedBaseContracts":[453],"name":"IHooks","nameLocation":"985:6:5","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":264,"nodeType":"StructuredDocumentation","src":"1205:769:5","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":280,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:5","nodeType":"FunctionDefinition","parameters":{"id":276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":266,"mutability":"mutable","name":"factory","nameLocation":"2016:7:5","nodeType":"VariableDeclaration","scope":280,"src":"2008:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":265,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":268,"mutability":"mutable","name":"pool","nameLocation":"2041:4:5","nodeType":"VariableDeclaration","scope":280,"src":"2033:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":267,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":272,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:5","nodeType":"VariableDeclaration","scope":280,"src":"2055:32:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2412_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":270,"nodeType":"UserDefinedTypeName","pathNode":{"id":269,"name":"TokenConfig","nameLocations":["2055:11:5"],"nodeType":"IdentifierPath","referencedDeclaration":2412,"src":"2055:11:5"},"referencedDeclaration":2412,"src":"2055:11:5","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2412_storage_ptr","typeString":"struct TokenConfig"}},"id":271,"nodeType":"ArrayTypeName","src":"2055:13:5","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2412_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":275,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:5","nodeType":"VariableDeclaration","scope":280,"src":"2097:48:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2298_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":274,"nodeType":"UserDefinedTypeName","pathNode":{"id":273,"name":"LiquidityManagement","nameLocations":["2097:19:5"],"nodeType":"IdentifierPath","referencedDeclaration":2298,"src":"2097:19:5"},"referencedDeclaration":2298,"src":"2097:19:5","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2298_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:5"},"returnParameters":{"id":279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":278,"mutability":"mutable","name":"success","nameLocation":"2175:7:5","nodeType":"VariableDeclaration","scope":280,"src":"2170:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":277,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:5"},"scope":453,"src":"1979:205:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":281,"nodeType":"StructuredDocumentation","src":"2190:412:5","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":287,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:5","nodeType":"FunctionDefinition","parameters":{"id":282,"nodeType":"ParameterList","parameters":[],"src":"2628:2:5"},"returnParameters":{"id":286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":285,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:5","nodeType":"VariableDeclaration","scope":287,"src":"2654:26:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2345_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":284,"nodeType":"UserDefinedTypeName","pathNode":{"id":283,"name":"HookFlags","nameLocations":["2654:9:5"],"nodeType":"IdentifierPath","referencedDeclaration":2345,"src":"2654:9:5"},"referencedDeclaration":2345,"src":"2654:9:5","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2345_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:5"},"scope":453,"src":"2607:75:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":288,"nodeType":"StructuredDocumentation","src":"2897:484:5","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":298,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:5","nodeType":"FunctionDefinition","parameters":{"id":294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":291,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:5","nodeType":"VariableDeclaration","scope":298,"src":"3414:31:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":289,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":290,"nodeType":"ArrayTypeName","src":"3414:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":293,"mutability":"mutable","name":"userData","nameLocation":"3460:8:5","nodeType":"VariableDeclaration","scope":298,"src":"3447:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":292,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:5"},"returnParameters":{"id":297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":296,"mutability":"mutable","name":"success","nameLocation":"3493:7:5","nodeType":"VariableDeclaration","scope":298,"src":"3488:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":295,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:5"},"scope":453,"src":"3386:116:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":299,"nodeType":"StructuredDocumentation","src":"3508:563:5","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":311,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:5","nodeType":"FunctionDefinition","parameters":{"id":307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":302,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:5","nodeType":"VariableDeclaration","scope":311,"src":"4112:31:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":300,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":301,"nodeType":"ArrayTypeName","src":"4112:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":304,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:5","nodeType":"VariableDeclaration","scope":311,"src":"4153:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":306,"mutability":"mutable","name":"userData","nameLocation":"4196:8:5","nodeType":"VariableDeclaration","scope":311,"src":"4183:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":305,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:5"},"returnParameters":{"id":310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":309,"mutability":"mutable","name":"success","nameLocation":"4234:7:5","nodeType":"VariableDeclaration","scope":311,"src":"4229:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":308,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:5"},"scope":453,"src":"4076:167:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":312,"nodeType":"StructuredDocumentation","src":"4461:953:5","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":334,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:5","nodeType":"FunctionDefinition","parameters":{"id":330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":314,"mutability":"mutable","name":"router","nameLocation":"5466:6:5","nodeType":"VariableDeclaration","scope":334,"src":"5458:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":313,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":316,"mutability":"mutable","name":"pool","nameLocation":"5490:4:5","nodeType":"VariableDeclaration","scope":334,"src":"5482:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":315,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":319,"mutability":"mutable","name":"kind","nameLocation":"5521:4:5","nodeType":"VariableDeclaration","scope":334,"src":"5504:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2525","typeString":"enum AddLiquidityKind"},"typeName":{"id":318,"nodeType":"UserDefinedTypeName","pathNode":{"id":317,"name":"AddLiquidityKind","nameLocations":["5504:16:5"],"nodeType":"IdentifierPath","referencedDeclaration":2525,"src":"5504:16:5"},"referencedDeclaration":2525,"src":"5504:16:5","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2525","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":322,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:5","nodeType":"VariableDeclaration","scope":334,"src":"5535:37:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":320,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":321,"nodeType":"ArrayTypeName","src":"5535:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":324,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:5","nodeType":"VariableDeclaration","scope":334,"src":"5582:23:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":323,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":327,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:5","nodeType":"VariableDeclaration","scope":334,"src":"5615:33:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":325,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":326,"nodeType":"ArrayTypeName","src":"5615:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":329,"mutability":"mutable","name":"userData","nameLocation":"5671:8:5","nodeType":"VariableDeclaration","scope":334,"src":"5658:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":328,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:5"},"returnParameters":{"id":333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":332,"mutability":"mutable","name":"success","nameLocation":"5709:7:5","nodeType":"VariableDeclaration","scope":334,"src":"5704:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":331,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:5"},"scope":453,"src":"5419:299:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":335,"nodeType":"StructuredDocumentation","src":"5724:1250:5","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":363,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:5","nodeType":"FunctionDefinition","parameters":{"id":356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":337,"mutability":"mutable","name":"router","nameLocation":"7025:6:5","nodeType":"VariableDeclaration","scope":363,"src":"7017:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":336,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":339,"mutability":"mutable","name":"pool","nameLocation":"7049:4:5","nodeType":"VariableDeclaration","scope":363,"src":"7041:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":338,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":342,"mutability":"mutable","name":"kind","nameLocation":"7080:4:5","nodeType":"VariableDeclaration","scope":363,"src":"7063:21:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2525","typeString":"enum AddLiquidityKind"},"typeName":{"id":341,"nodeType":"UserDefinedTypeName","pathNode":{"id":340,"name":"AddLiquidityKind","nameLocations":["7063:16:5"],"nodeType":"IdentifierPath","referencedDeclaration":2525,"src":"7063:16:5"},"referencedDeclaration":2525,"src":"7063:16:5","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2525","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":345,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:5","nodeType":"VariableDeclaration","scope":363,"src":"7094:34:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":343,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":344,"nodeType":"ArrayTypeName","src":"7094:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":348,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:5","nodeType":"VariableDeclaration","scope":363,"src":"7138:29:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":346,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":347,"nodeType":"ArrayTypeName","src":"7138:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":350,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:5","nodeType":"VariableDeclaration","scope":363,"src":"7177:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":349,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":353,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:5","nodeType":"VariableDeclaration","scope":363,"src":"7207:33:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":351,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":352,"nodeType":"ArrayTypeName","src":"7207:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":355,"mutability":"mutable","name":"userData","nameLocation":"7263:8:5","nodeType":"VariableDeclaration","scope":363,"src":"7250:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":354,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:5"},"returnParameters":{"id":362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":358,"mutability":"mutable","name":"success","nameLocation":"7301:7:5","nodeType":"VariableDeclaration","scope":363,"src":"7296:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":357,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":361,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:5","nodeType":"VariableDeclaration","scope":363,"src":"7310:41:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":359,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":360,"nodeType":"ArrayTypeName","src":"7310:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:5"},"scope":453,"src":"6979:374:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":364,"nodeType":"StructuredDocumentation","src":"7572:992:5","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":386,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:5","nodeType":"FunctionDefinition","parameters":{"id":382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":366,"mutability":"mutable","name":"router","nameLocation":"8619:6:5","nodeType":"VariableDeclaration","scope":386,"src":"8611:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":365,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":368,"mutability":"mutable","name":"pool","nameLocation":"8643:4:5","nodeType":"VariableDeclaration","scope":386,"src":"8635:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":367,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":371,"mutability":"mutable","name":"kind","nameLocation":"8677:4:5","nodeType":"VariableDeclaration","scope":386,"src":"8657:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2546","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":370,"nodeType":"UserDefinedTypeName","pathNode":{"id":369,"name":"RemoveLiquidityKind","nameLocations":["8657:19:5"],"nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"8657:19:5"},"referencedDeclaration":2546,"src":"8657:19:5","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2546","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":373,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:5","nodeType":"VariableDeclaration","scope":386,"src":"8691:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":372,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":376,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:5","nodeType":"VariableDeclaration","scope":386,"src":"8723:38:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":374,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":375,"nodeType":"ArrayTypeName","src":"8723:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":379,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:5","nodeType":"VariableDeclaration","scope":386,"src":"8771:33:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":377,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":378,"nodeType":"ArrayTypeName","src":"8771:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":381,"mutability":"mutable","name":"userData","nameLocation":"8827:8:5","nodeType":"VariableDeclaration","scope":386,"src":"8814:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":380,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:5"},"returnParameters":{"id":385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":384,"mutability":"mutable","name":"success","nameLocation":"8865:7:5","nodeType":"VariableDeclaration","scope":386,"src":"8860:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":383,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:5"},"scope":453,"src":"8569:305:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":387,"nodeType":"StructuredDocumentation","src":"8880:1276:5","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":415,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:5","nodeType":"FunctionDefinition","parameters":{"id":408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":389,"mutability":"mutable","name":"router","nameLocation":"10210:6:5","nodeType":"VariableDeclaration","scope":415,"src":"10202:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":388,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":391,"mutability":"mutable","name":"pool","nameLocation":"10234:4:5","nodeType":"VariableDeclaration","scope":415,"src":"10226:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":390,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":394,"mutability":"mutable","name":"kind","nameLocation":"10268:4:5","nodeType":"VariableDeclaration","scope":415,"src":"10248:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2546","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":393,"nodeType":"UserDefinedTypeName","pathNode":{"id":392,"name":"RemoveLiquidityKind","nameLocations":["10248:19:5"],"nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"10248:19:5"},"referencedDeclaration":2546,"src":"10248:19:5","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2546","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":396,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:5","nodeType":"VariableDeclaration","scope":415,"src":"10282:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":395,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":399,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:5","nodeType":"VariableDeclaration","scope":415,"src":"10311:35:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":397,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":398,"nodeType":"ArrayTypeName","src":"10311:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":402,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:5","nodeType":"VariableDeclaration","scope":415,"src":"10356:30:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":400,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":401,"nodeType":"ArrayTypeName","src":"10356:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":405,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:5","nodeType":"VariableDeclaration","scope":415,"src":"10396:33:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":403,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":404,"nodeType":"ArrayTypeName","src":"10396:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"userData","nameLocation":"10452:8:5","nodeType":"VariableDeclaration","scope":415,"src":"10439:21:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":406,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:5","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:5"},"returnParameters":{"id":414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":410,"mutability":"mutable","name":"success","nameLocation":"10490:7:5","nodeType":"VariableDeclaration","scope":415,"src":"10485:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":409,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":413,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:5","nodeType":"VariableDeclaration","scope":415,"src":"10499:42:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":411,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":412,"nodeType":"ArrayTypeName","src":"10499:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:5"},"scope":453,"src":"10161:382:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":416,"nodeType":"StructuredDocumentation","src":"10753:556:5","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":426,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:5","nodeType":"FunctionDefinition","parameters":{"id":422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":419,"mutability":"mutable","name":"params","nameLocation":"11360:6:5","nodeType":"VariableDeclaration","scope":426,"src":"11336:30:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2490_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":418,"nodeType":"UserDefinedTypeName","pathNode":{"id":417,"name":"PoolSwapParams","nameLocations":["11336:14:5"],"nodeType":"IdentifierPath","referencedDeclaration":2490,"src":"11336:14:5"},"referencedDeclaration":2490,"src":"11336:14:5","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2490_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":421,"mutability":"mutable","name":"pool","nameLocation":"11376:4:5","nodeType":"VariableDeclaration","scope":426,"src":"11368:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":420,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:5"},"returnParameters":{"id":425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":424,"mutability":"mutable","name":"success","nameLocation":"11405:7:5","nodeType":"VariableDeclaration","scope":426,"src":"11400:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":423,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:5"},"scope":453,"src":"11314:100:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":427,"nodeType":"StructuredDocumentation","src":"11420:671:5","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":437,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:5","nodeType":"FunctionDefinition","parameters":{"id":431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":430,"mutability":"mutable","name":"params","nameLocation":"12151:6:5","nodeType":"VariableDeclaration","scope":437,"src":"12126:31:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2519_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":429,"nodeType":"UserDefinedTypeName","pathNode":{"id":428,"name":"AfterSwapParams","nameLocations":["12126:15:5"],"nodeType":"IdentifierPath","referencedDeclaration":2519,"src":"12126:15:5"},"referencedDeclaration":2519,"src":"12126:15:5","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2519_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:5"},"returnParameters":{"id":436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":433,"mutability":"mutable","name":"success","nameLocation":"12187:7:5","nodeType":"VariableDeclaration","scope":437,"src":"12182:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":432,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":435,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:5","nodeType":"VariableDeclaration","scope":437,"src":"12196:39:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":434,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:5"},"scope":453,"src":"12096:141:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":438,"nodeType":"StructuredDocumentation","src":"12243:795:5","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":452,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:5","nodeType":"FunctionDefinition","parameters":{"id":446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":441,"mutability":"mutable","name":"params","nameLocation":"13119:6:5","nodeType":"VariableDeclaration","scope":452,"src":"13095:30:5","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2490_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":440,"nodeType":"UserDefinedTypeName","pathNode":{"id":439,"name":"PoolSwapParams","nameLocations":["13095:14:5"],"nodeType":"IdentifierPath","referencedDeclaration":2490,"src":"13095:14:5"},"referencedDeclaration":2490,"src":"13095:14:5","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2490_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":443,"mutability":"mutable","name":"pool","nameLocation":"13143:4:5","nodeType":"VariableDeclaration","scope":452,"src":"13135:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":442,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":445,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:5","nodeType":"VariableDeclaration","scope":452,"src":"13157:31:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":444,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:5"},"returnParameters":{"id":451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":448,"mutability":"mutable","name":"success","nameLocation":"13223:7:5","nodeType":"VariableDeclaration","scope":452,"src":"13218:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":447,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":450,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:5","nodeType":"VariableDeclaration","scope":452,"src":"13232:32:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":449,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:5"},"scope":453,"src":"13043:223:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":454,"src":"975:12293:5","usedErrors":[],"usedEvents":[]}],"src":"46:13223:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[7165],"IProtocolFeeController":[791],"IVault":[829]},"id":792,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":455,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":457,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":792,"sourceUnit":7166,"src":"72:72:6","symbolAliases":[{"foreign":{"id":456,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"81:6:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":459,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":792,"sourceUnit":830,"src":"146:38:6","symbolAliases":[{"foreign":{"id":458,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"155:6:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":460,"nodeType":"StructuredDocumentation","src":"186:80:6","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":791,"linearizedBaseContracts":[791],"name":"IProtocolFeeController","nameLocation":"276:22:6","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":461,"nodeType":"StructuredDocumentation","src":"305:157:6","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":465,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:6","nodeType":"EventDefinition","parameters":{"id":464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":463,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:6","nodeType":"VariableDeclaration","scope":465,"src":"512:25:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":462,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:6"},"src":"467:72:6"},{"anonymous":false,"documentation":{"id":466,"nodeType":"StructuredDocumentation","src":"545:160:6","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":470,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:6","nodeType":"EventDefinition","parameters":{"id":469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":468,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:6","nodeType":"VariableDeclaration","scope":470,"src":"756:26:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":467,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:6"},"src":"710:74:6"},{"anonymous":false,"documentation":{"id":471,"nodeType":"StructuredDocumentation","src":"790:245:6","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":477,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:6","nodeType":"EventDefinition","parameters":{"id":476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":473,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:6","nodeType":"VariableDeclaration","scope":477,"src":"1079:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":472,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":475,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:6","nodeType":"VariableDeclaration","scope":477,"src":"1101:25:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":474,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:6"},"src":"1040:88:6"},{"anonymous":false,"documentation":{"id":478,"nodeType":"StructuredDocumentation","src":"1134:249:6","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":484,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:6","nodeType":"EventDefinition","parameters":{"id":483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":480,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:6","nodeType":"VariableDeclaration","scope":484,"src":"1428:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":479,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":482,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:6","nodeType":"VariableDeclaration","scope":484,"src":"1450:26:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":481,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:6"},"src":"1388:90:6"},{"anonymous":false,"documentation":{"id":485,"nodeType":"StructuredDocumentation","src":"1484:267:6","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":491,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:6","nodeType":"EventDefinition","parameters":{"id":490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":487,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:6","nodeType":"VariableDeclaration","scope":491,"src":"1798:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":486,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":489,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:6","nodeType":"VariableDeclaration","scope":491,"src":"1820:36:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":488,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:6"},"src":"1756:102:6"},{"anonymous":false,"documentation":{"id":492,"nodeType":"StructuredDocumentation","src":"1864:271:6","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":498,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:6","nodeType":"EventDefinition","parameters":{"id":497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":494,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:6","nodeType":"VariableDeclaration","scope":498,"src":"2183:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":493,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":496,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:6","nodeType":"VariableDeclaration","scope":498,"src":"2205:37:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":495,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:6"},"src":"2140:104:6"},{"anonymous":false,"documentation":{"id":499,"nodeType":"StructuredDocumentation","src":"2250:560:6","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":508,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:6","nodeType":"EventDefinition","parameters":{"id":507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":501,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:6","nodeType":"VariableDeclaration","scope":508,"src":"2846:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":500,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":504,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:6","nodeType":"VariableDeclaration","scope":508,"src":"2868:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":503,"nodeType":"UserDefinedTypeName","pathNode":{"id":502,"name":"IERC20","nameLocations":["2868:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2868:6:6"},"referencedDeclaration":7165,"src":"2868:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":506,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:6","nodeType":"VariableDeclaration","scope":508,"src":"2890:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":505,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:6"},"src":"2815:91:6"},{"anonymous":false,"documentation":{"id":509,"nodeType":"StructuredDocumentation","src":"2912:564:6","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":518,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:6","nodeType":"EventDefinition","parameters":{"id":517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":511,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:6","nodeType":"VariableDeclaration","scope":518,"src":"3513:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":510,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":514,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:6","nodeType":"VariableDeclaration","scope":518,"src":"3535:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":513,"nodeType":"UserDefinedTypeName","pathNode":{"id":512,"name":"IERC20","nameLocations":["3535:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3535:6:6"},"referencedDeclaration":7165,"src":"3535:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":516,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:6","nodeType":"VariableDeclaration","scope":518,"src":"3557:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":515,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:6"},"src":"3481:92:6"},{"anonymous":false,"documentation":{"id":519,"nodeType":"StructuredDocumentation","src":"3579:333:6","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":530,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:6","nodeType":"EventDefinition","parameters":{"id":529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":521,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:6","nodeType":"VariableDeclaration","scope":530,"src":"3945:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":520,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":524,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:6","nodeType":"VariableDeclaration","scope":530,"src":"3967:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":523,"nodeType":"UserDefinedTypeName","pathNode":{"id":522,"name":"IERC20","nameLocations":["3967:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3967:6:6"},"referencedDeclaration":7165,"src":"3967:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":526,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:6","nodeType":"VariableDeclaration","scope":530,"src":"3989:25:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":528,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:6","nodeType":"VariableDeclaration","scope":530,"src":"4016:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":527,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:6"},"src":"3917:115:6"},{"anonymous":false,"documentation":{"id":531,"nodeType":"StructuredDocumentation","src":"4038:398:6","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":542,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:6","nodeType":"EventDefinition","parameters":{"id":541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":533,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:6","nodeType":"VariableDeclaration","scope":542,"src":"4481:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":532,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":536,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:6","nodeType":"VariableDeclaration","scope":542,"src":"4511:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":535,"nodeType":"UserDefinedTypeName","pathNode":{"id":534,"name":"IERC20","nameLocations":["4511:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"4511:6:6"},"referencedDeclaration":7165,"src":"4511:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":538,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:6","nodeType":"VariableDeclaration","scope":542,"src":"4541:25:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":537,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":540,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:6","nodeType":"VariableDeclaration","scope":542,"src":"4576:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":539,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:6"},"src":"4441:156:6"},{"anonymous":false,"documentation":{"id":543,"nodeType":"StructuredDocumentation","src":"4603:529:6","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":551,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:6","nodeType":"EventDefinition","parameters":{"id":550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":545,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:6","nodeType":"VariableDeclaration","scope":551,"src":"5190:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":544,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":547,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:6","nodeType":"VariableDeclaration","scope":551,"src":"5220:34:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":546,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":549,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:6","nodeType":"VariableDeclaration","scope":551,"src":"5264:24:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":548,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:6"},"src":"5137:158:6"},{"anonymous":false,"documentation":{"id":552,"nodeType":"StructuredDocumentation","src":"5301:533:6","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":560,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:6","nodeType":"EventDefinition","parameters":{"id":559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":554,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:6","nodeType":"VariableDeclaration","scope":560,"src":"5893:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":553,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":556,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:6","nodeType":"VariableDeclaration","scope":560,"src":"5923:35:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":555,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":558,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:6","nodeType":"VariableDeclaration","scope":560,"src":"5968:24:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":557,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:6"},"src":"5839:160:6"},{"anonymous":false,"documentation":{"id":561,"nodeType":"StructuredDocumentation","src":"6005:738:6","text":" @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"d9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed07912","id":569,"name":"PoolRegisteredWithFeeController","nameLocation":"6754:31:6","nodeType":"EventDefinition","parameters":{"id":568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":563,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6802:4:6","nodeType":"VariableDeclaration","scope":569,"src":"6786:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":562,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":565,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6824:11:6","nodeType":"VariableDeclaration","scope":569,"src":"6808:27:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":564,"name":"address","nodeType":"ElementaryTypeName","src":"6808:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":567,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6842:17:6","nodeType":"VariableDeclaration","scope":569,"src":"6837:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":566,"name":"bool","nodeType":"ElementaryTypeName","src":"6837:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6785:75:6"},"src":"6748:113:6"},{"documentation":{"id":570,"nodeType":"StructuredDocumentation","src":"6867:219:6","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":572,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7097:32:6","nodeType":"ErrorDefinition","parameters":{"id":571,"nodeType":"ParameterList","parameters":[],"src":"7129:2:6"},"src":"7091:41:6"},{"documentation":{"id":573,"nodeType":"StructuredDocumentation","src":"7138:221:6","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":575,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7370:33:6","nodeType":"ErrorDefinition","parameters":{"id":574,"nodeType":"ParameterList","parameters":[],"src":"7403:2:6"},"src":"7364:42:6"},{"documentation":{"id":576,"nodeType":"StructuredDocumentation","src":"7412:156:6","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":580,"name":"PoolCreatorNotRegistered","nameLocation":"7579:24:6","nodeType":"ErrorDefinition","parameters":{"id":579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":578,"mutability":"mutable","name":"pool","nameLocation":"7612:4:6","nodeType":"VariableDeclaration","scope":580,"src":"7604:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":577,"name":"address","nodeType":"ElementaryTypeName","src":"7604:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7603:14:6"},"src":"7573:45:6"},{"documentation":{"id":581,"nodeType":"StructuredDocumentation","src":"7624:236:6","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":587,"name":"CallerIsNotPoolCreator","nameLocation":"7871:22:6","nodeType":"ErrorDefinition","parameters":{"id":586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":583,"mutability":"mutable","name":"caller","nameLocation":"7902:6:6","nodeType":"VariableDeclaration","scope":587,"src":"7894:14:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":582,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":585,"mutability":"mutable","name":"pool","nameLocation":"7918:4:6","nodeType":"VariableDeclaration","scope":587,"src":"7910:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":584,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7893:30:6"},"src":"7865:59:6"},{"documentation":{"id":588,"nodeType":"StructuredDocumentation","src":"7930:110:6","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":590,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"8051:31:6","nodeType":"ErrorDefinition","parameters":{"id":589,"nodeType":"ParameterList","parameters":[],"src":"8082:2:6"},"src":"8045:40:6"},{"documentation":{"id":591,"nodeType":"StructuredDocumentation","src":"8091:109:6","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":597,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8214:5:6","nodeType":"FunctionDefinition","parameters":{"id":592,"nodeType":"ParameterList","parameters":[],"src":"8219:2:6"},"returnParameters":{"id":596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":597,"src":"8245:6:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":594,"nodeType":"UserDefinedTypeName","pathNode":{"id":593,"name":"IVault","nameLocations":["8245:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"8245:6:6"},"referencedDeclaration":829,"src":"8245:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8244:8:6"},"scope":791,"src":"8205:48:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":598,"nodeType":"StructuredDocumentation","src":"8259:131:6","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":603,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8404:20:6","nodeType":"FunctionDefinition","parameters":{"id":601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":600,"mutability":"mutable","name":"pool","nameLocation":"8433:4:6","nodeType":"VariableDeclaration","scope":603,"src":"8425:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":599,"name":"address","nodeType":"ElementaryTypeName","src":"8425:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8424:14:6"},"returnParameters":{"id":602,"nodeType":"ParameterList","parameters":[],"src":"8447:0:6"},"scope":791,"src":"8395:53:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":604,"nodeType":"StructuredDocumentation","src":"8454:156:6","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":609,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8624:34:6","nodeType":"FunctionDefinition","parameters":{"id":605,"nodeType":"ParameterList","parameters":[],"src":"8658:2:6"},"returnParameters":{"id":608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":607,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8692:25:6","nodeType":"VariableDeclaration","scope":609,"src":"8684:33:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":606,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8683:35:6"},"scope":791,"src":"8615:104:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":610,"nodeType":"StructuredDocumentation","src":"8725:159:6","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":615,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8898:35:6","nodeType":"FunctionDefinition","parameters":{"id":611,"nodeType":"ParameterList","parameters":[],"src":"8933:2:6"},"returnParameters":{"id":614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":613,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8967:26:6","nodeType":"VariableDeclaration","scope":615,"src":"8959:34:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":612,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8958:36:6"},"scope":791,"src":"8889:106:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":616,"nodeType":"StructuredDocumentation","src":"9001:207:6","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":623,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9222:16:6","nodeType":"FunctionDefinition","parameters":{"id":619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":618,"mutability":"mutable","name":"pool","nameLocation":"9247:4:6","nodeType":"VariableDeclaration","scope":623,"src":"9239:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":617,"name":"address","nodeType":"ElementaryTypeName","src":"9239:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9238:14:6"},"returnParameters":{"id":622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":623,"src":"9276:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":620,"name":"bool","nodeType":"ElementaryTypeName","src":"9276:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9275:6:6"},"scope":791,"src":"9213:69:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":624,"nodeType":"StructuredDocumentation","src":"9288:292:6","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":633,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9594:26:6","nodeType":"FunctionDefinition","parameters":{"id":627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":626,"mutability":"mutable","name":"pool","nameLocation":"9638:4:6","nodeType":"VariableDeclaration","scope":633,"src":"9630:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":625,"name":"address","nodeType":"ElementaryTypeName","src":"9630:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9620:28:6"},"returnParameters":{"id":632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":629,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9680:25:6","nodeType":"VariableDeclaration","scope":633,"src":"9672:33:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":628,"name":"uint256","nodeType":"ElementaryTypeName","src":"9672:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":631,"mutability":"mutable","name":"isOverride","nameLocation":"9712:10:6","nodeType":"VariableDeclaration","scope":633,"src":"9707:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":630,"name":"bool","nodeType":"ElementaryTypeName","src":"9707:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9671:52:6"},"scope":791,"src":"9585:139:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":634,"nodeType":"StructuredDocumentation","src":"9730:295:6","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":643,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"10039:27:6","nodeType":"FunctionDefinition","parameters":{"id":637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":636,"mutability":"mutable","name":"pool","nameLocation":"10084:4:6","nodeType":"VariableDeclaration","scope":643,"src":"10076:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":635,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10066:28:6"},"returnParameters":{"id":642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":639,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10126:26:6","nodeType":"VariableDeclaration","scope":643,"src":"10118:34:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":638,"name":"uint256","nodeType":"ElementaryTypeName","src":"10118:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":641,"mutability":"mutable","name":"isOverride","nameLocation":"10159:10:6","nodeType":"VariableDeclaration","scope":643,"src":"10154:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":640,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10117:53:6"},"scope":791,"src":"10030:141:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":644,"nodeType":"StructuredDocumentation","src":"10177:249:6","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":651,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10440:31:6","nodeType":"FunctionDefinition","parameters":{"id":647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":646,"mutability":"mutable","name":"pool","nameLocation":"10480:4:6","nodeType":"VariableDeclaration","scope":651,"src":"10472:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":645,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10471:14:6"},"returnParameters":{"id":650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":651,"src":"10509:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":648,"name":"uint256","nodeType":"ElementaryTypeName","src":"10509:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10508:9:6"},"scope":791,"src":"10431:87:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":652,"nodeType":"StructuredDocumentation","src":"10524:252:6","text":" @notice Getter for the current pool creator yield fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee"},"functionSelector":"0252aab5","id":659,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10790:32:6","nodeType":"FunctionDefinition","parameters":{"id":655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":654,"mutability":"mutable","name":"pool","nameLocation":"10831:4:6","nodeType":"VariableDeclaration","scope":659,"src":"10823:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":653,"name":"address","nodeType":"ElementaryTypeName","src":"10823:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10822:14:6"},"returnParameters":{"id":658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":657,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":659,"src":"10860:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":656,"name":"uint256","nodeType":"ElementaryTypeName","src":"10860:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10859:9:6"},"scope":791,"src":"10781:88:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":660,"nodeType":"StructuredDocumentation","src":"10875:344:6","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":668,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11233:21:6","nodeType":"FunctionDefinition","parameters":{"id":663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":662,"mutability":"mutable","name":"pool","nameLocation":"11263:4:6","nodeType":"VariableDeclaration","scope":668,"src":"11255:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":661,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11254:14:6"},"returnParameters":{"id":667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":666,"mutability":"mutable","name":"feeAmounts","nameLocation":"11309:10:6","nodeType":"VariableDeclaration","scope":668,"src":"11292:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":664,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":665,"nodeType":"ArrayTypeName","src":"11292:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11291:29:6"},"scope":791,"src":"11224:97:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":669,"nodeType":"StructuredDocumentation","src":"11327:348:6","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":677,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11689:24:6","nodeType":"FunctionDefinition","parameters":{"id":672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":671,"mutability":"mutable","name":"pool","nameLocation":"11722:4:6","nodeType":"VariableDeclaration","scope":677,"src":"11714:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":670,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11713:14:6"},"returnParameters":{"id":676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":675,"mutability":"mutable","name":"feeAmounts","nameLocation":"11768:10:6","nodeType":"VariableDeclaration","scope":677,"src":"11751:27:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":673,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":674,"nodeType":"ArrayTypeName","src":"11751:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11750:29:6"},"scope":791,"src":"11680:100:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":678,"nodeType":"StructuredDocumentation","src":"11786:1445:6","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":687,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13245:29:6","nodeType":"FunctionDefinition","parameters":{"id":683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":680,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13292:21:6","nodeType":"VariableDeclaration","scope":687,"src":"13284:29:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":679,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":682,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13331:24:6","nodeType":"VariableDeclaration","scope":687,"src":"13323:32:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":681,"name":"uint256","nodeType":"ElementaryTypeName","src":"13323:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13274:87:6"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":685,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13393:22:6","nodeType":"VariableDeclaration","scope":687,"src":"13385:30:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":684,"name":"uint256","nodeType":"ElementaryTypeName","src":"13385:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13384:32:6"},"scope":791,"src":"13236:181:6","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":688,"nodeType":"StructuredDocumentation","src":"13423:398:6","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":693,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13835:31:6","nodeType":"FunctionDefinition","parameters":{"id":691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":690,"mutability":"mutable","name":"pool","nameLocation":"13875:4:6","nodeType":"VariableDeclaration","scope":693,"src":"13867:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":689,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13866:14:6"},"returnParameters":{"id":692,"nodeType":"ParameterList","parameters":[],"src":"13889:0:6"},"scope":791,"src":"13826:64:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":694,"nodeType":"StructuredDocumentation","src":"13896:400:6","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":699,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14310:32:6","nodeType":"FunctionDefinition","parameters":{"id":697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":696,"mutability":"mutable","name":"pool","nameLocation":"14351:4:6","nodeType":"VariableDeclaration","scope":699,"src":"14343:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":695,"name":"address","nodeType":"ElementaryTypeName","src":"14343:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14342:14:6"},"returnParameters":{"id":698,"nodeType":"ParameterList","parameters":[],"src":"14365:0:6"},"scope":791,"src":"14301:65:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":700,"nodeType":"StructuredDocumentation","src":"14590:826:6","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":713,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15430:12:6","nodeType":"FunctionDefinition","parameters":{"id":707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":702,"mutability":"mutable","name":"pool","nameLocation":"15460:4:6","nodeType":"VariableDeclaration","scope":713,"src":"15452:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":701,"name":"address","nodeType":"ElementaryTypeName","src":"15452:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":704,"mutability":"mutable","name":"poolCreator","nameLocation":"15482:11:6","nodeType":"VariableDeclaration","scope":713,"src":"15474:19:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":703,"name":"address","nodeType":"ElementaryTypeName","src":"15474:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":706,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15508:17:6","nodeType":"VariableDeclaration","scope":713,"src":"15503:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":705,"name":"bool","nodeType":"ElementaryTypeName","src":"15503:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15442:89:6"},"returnParameters":{"id":712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":709,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15558:26:6","nodeType":"VariableDeclaration","scope":713,"src":"15550:34:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":708,"name":"uint256","nodeType":"ElementaryTypeName","src":"15550:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":711,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15594:27:6","nodeType":"VariableDeclaration","scope":713,"src":"15586:35:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":710,"name":"uint256","nodeType":"ElementaryTypeName","src":"15586:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15549:73:6"},"scope":791,"src":"15421:202:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":714,"nodeType":"StructuredDocumentation","src":"15629:175:6","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":719,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15818:34:6","nodeType":"FunctionDefinition","parameters":{"id":717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":716,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15861:28:6","nodeType":"VariableDeclaration","scope":719,"src":"15853:36:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":715,"name":"uint256","nodeType":"ElementaryTypeName","src":"15853:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15852:38:6"},"returnParameters":{"id":718,"nodeType":"ParameterList","parameters":[],"src":"15899:0:6"},"scope":791,"src":"15809:91:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":720,"nodeType":"StructuredDocumentation","src":"15906:178:6","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":725,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16098:35:6","nodeType":"FunctionDefinition","parameters":{"id":723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":722,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16142:29:6","nodeType":"VariableDeclaration","scope":725,"src":"16134:37:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":721,"name":"uint256","nodeType":"ElementaryTypeName","src":"16134:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16133:39:6"},"returnParameters":{"id":724,"nodeType":"ParameterList","parameters":[],"src":"16181:0:6"},"scope":791,"src":"16089:93:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":726,"nodeType":"StructuredDocumentation","src":"16188:272:6","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":733,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16474:28:6","nodeType":"FunctionDefinition","parameters":{"id":731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":728,"mutability":"mutable","name":"pool","nameLocation":"16511:4:6","nodeType":"VariableDeclaration","scope":733,"src":"16503:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":727,"name":"address","nodeType":"ElementaryTypeName","src":"16503:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":730,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16525:28:6","nodeType":"VariableDeclaration","scope":733,"src":"16517:36:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":729,"name":"uint256","nodeType":"ElementaryTypeName","src":"16517:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16502:52:6"},"returnParameters":{"id":732,"nodeType":"ParameterList","parameters":[],"src":"16563:0:6"},"scope":791,"src":"16465:99:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":734,"nodeType":"StructuredDocumentation","src":"16570:276:6","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":741,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16860:29:6","nodeType":"FunctionDefinition","parameters":{"id":739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":736,"mutability":"mutable","name":"pool","nameLocation":"16898:4:6","nodeType":"VariableDeclaration","scope":741,"src":"16890:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":735,"name":"address","nodeType":"ElementaryTypeName","src":"16890:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":738,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16912:29:6","nodeType":"VariableDeclaration","scope":741,"src":"16904:37:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":737,"name":"uint256","nodeType":"ElementaryTypeName","src":"16904:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16889:53:6"},"returnParameters":{"id":740,"nodeType":"ParameterList","parameters":[],"src":"16951:0:6"},"scope":791,"src":"16851:101:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":742,"nodeType":"StructuredDocumentation","src":"16958:623:6","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":749,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17595:31:6","nodeType":"FunctionDefinition","parameters":{"id":747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":744,"mutability":"mutable","name":"pool","nameLocation":"17635:4:6","nodeType":"VariableDeclaration","scope":749,"src":"17627:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":743,"name":"address","nodeType":"ElementaryTypeName","src":"17627:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":746,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17649:28:6","nodeType":"VariableDeclaration","scope":749,"src":"17641:36:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":745,"name":"uint256","nodeType":"ElementaryTypeName","src":"17641:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17626:52:6"},"returnParameters":{"id":748,"nodeType":"ParameterList","parameters":[],"src":"17687:0:6"},"scope":791,"src":"17586:102:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":750,"nodeType":"StructuredDocumentation","src":"17694:626:6","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":757,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18334:32:6","nodeType":"FunctionDefinition","parameters":{"id":755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":752,"mutability":"mutable","name":"pool","nameLocation":"18375:4:6","nodeType":"VariableDeclaration","scope":757,"src":"18367:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":751,"name":"address","nodeType":"ElementaryTypeName","src":"18367:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":754,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18389:29:6","nodeType":"VariableDeclaration","scope":757,"src":"18381:37:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":753,"name":"uint256","nodeType":"ElementaryTypeName","src":"18381:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18366:53:6"},"returnParameters":{"id":756,"nodeType":"ParameterList","parameters":[],"src":"18428:0:6"},"scope":791,"src":"18325:104:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":758,"nodeType":"StructuredDocumentation","src":"18435:296:6","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":765,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18745:20:6","nodeType":"FunctionDefinition","parameters":{"id":763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":760,"mutability":"mutable","name":"pool","nameLocation":"18774:4:6","nodeType":"VariableDeclaration","scope":765,"src":"18766:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":759,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":762,"mutability":"mutable","name":"recipient","nameLocation":"18788:9:6","nodeType":"VariableDeclaration","scope":765,"src":"18780:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":761,"name":"address","nodeType":"ElementaryTypeName","src":"18780:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:33:6"},"returnParameters":{"id":764,"nodeType":"ParameterList","parameters":[],"src":"18807:0:6"},"scope":791,"src":"18736:72:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":766,"nodeType":"StructuredDocumentation","src":"18814:339:6","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":776,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19167:28:6","nodeType":"FunctionDefinition","parameters":{"id":774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":768,"mutability":"mutable","name":"pool","nameLocation":"19204:4:6","nodeType":"VariableDeclaration","scope":776,"src":"19196:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":767,"name":"address","nodeType":"ElementaryTypeName","src":"19196:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":770,"mutability":"mutable","name":"recipient","nameLocation":"19218:9:6","nodeType":"VariableDeclaration","scope":776,"src":"19210:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":769,"name":"address","nodeType":"ElementaryTypeName","src":"19210:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":773,"mutability":"mutable","name":"token","nameLocation":"19236:5:6","nodeType":"VariableDeclaration","scope":776,"src":"19229:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":772,"nodeType":"UserDefinedTypeName","pathNode":{"id":771,"name":"IERC20","nameLocations":["19229:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"19229:6:6"},"referencedDeclaration":7165,"src":"19229:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19195:47:6"},"returnParameters":{"id":775,"nodeType":"ParameterList","parameters":[],"src":"19251:0:6"},"scope":791,"src":"19158:94:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":777,"nodeType":"StructuredDocumentation","src":"19258:291:6","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":784,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19563:23:6","nodeType":"FunctionDefinition","parameters":{"id":782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":779,"mutability":"mutable","name":"pool","nameLocation":"19595:4:6","nodeType":"VariableDeclaration","scope":784,"src":"19587:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":778,"name":"address","nodeType":"ElementaryTypeName","src":"19587:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":781,"mutability":"mutable","name":"recipient","nameLocation":"19609:9:6","nodeType":"VariableDeclaration","scope":784,"src":"19601:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":780,"name":"address","nodeType":"ElementaryTypeName","src":"19601:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19586:33:6"},"returnParameters":{"id":783,"nodeType":"ParameterList","parameters":[],"src":"19628:0:6"},"scope":791,"src":"19554:75:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":785,"nodeType":"StructuredDocumentation","src":"19635:310:6","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":790,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19959:23:6","nodeType":"FunctionDefinition","parameters":{"id":788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":787,"mutability":"mutable","name":"pool","nameLocation":"19991:4:6","nodeType":"VariableDeclaration","scope":790,"src":"19983:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":786,"name":"address","nodeType":"ElementaryTypeName","src":"19983:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19982:14:6"},"returnParameters":{"id":789,"nodeType":"ParameterList","parameters":[],"src":"20005:0:6"},"scope":791,"src":"19950:56:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":792,"src":"266:19742:6","usedErrors":[572,575,580,587,590],"usedEvents":[465,470,477,484,491,498,508,518,530,542,551,560,569]}],"src":"46:19963:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[47],"IVault":[829],"IVaultAdmin":[1119],"IVaultErrors":[1486],"IVaultEvents":[1725],"IVaultExtension":[2144],"IVaultMain":[2280]},"id":830,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":793,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:7"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":795,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":830,"sourceUnit":48,"src":"72:80:7","symbolAliases":[{"foreign":{"id":794,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":797,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":830,"sourceUnit":2145,"src":"153:56:7","symbolAliases":[{"foreign":{"id":796,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2144,"src":"162:15:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":799,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":830,"sourceUnit":1487,"src":"210:50:7","symbolAliases":[{"foreign":{"id":798,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1486,"src":"219:12:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":801,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":830,"sourceUnit":1726,"src":"261:50:7","symbolAliases":[{"foreign":{"id":800,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1725,"src":"270:12:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":803,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":830,"sourceUnit":1120,"src":"312:48:7","symbolAliases":[{"foreign":{"id":802,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1119,"src":"321:11:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":805,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":830,"sourceUnit":2281,"src":"361:46:7","symbolAliases":[{"foreign":{"id":804,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2280,"src":"370:10:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":807,"name":"IVaultMain","nameLocations":["539:10:7"],"nodeType":"IdentifierPath","referencedDeclaration":2280,"src":"539:10:7"},"id":808,"nodeType":"InheritanceSpecifier","src":"539:10:7"},{"baseName":{"id":809,"name":"IVaultExtension","nameLocations":["551:15:7"],"nodeType":"IdentifierPath","referencedDeclaration":2144,"src":"551:15:7"},"id":810,"nodeType":"InheritanceSpecifier","src":"551:15:7"},{"baseName":{"id":811,"name":"IVaultAdmin","nameLocations":["568:11:7"],"nodeType":"IdentifierPath","referencedDeclaration":1119,"src":"568:11:7"},"id":812,"nodeType":"InheritanceSpecifier","src":"568:11:7"},{"baseName":{"id":813,"name":"IVaultErrors","nameLocations":["581:12:7"],"nodeType":"IdentifierPath","referencedDeclaration":1486,"src":"581:12:7"},"id":814,"nodeType":"InheritanceSpecifier","src":"581:12:7"},{"baseName":{"id":815,"name":"IVaultEvents","nameLocations":["595:12:7"],"nodeType":"IdentifierPath","referencedDeclaration":1725,"src":"595:12:7"},"id":816,"nodeType":"InheritanceSpecifier","src":"595:12:7"},{"baseName":{"id":817,"name":"IAuthentication","nameLocations":["609:15:7"],"nodeType":"IdentifierPath","referencedDeclaration":47,"src":"609:15:7"},"id":818,"nodeType":"InheritanceSpecifier","src":"609:15:7"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":806,"nodeType":"StructuredDocumentation","src":"409:110:7","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":829,"linearizedBaseContracts":[829,47,1725,1486,1119,2144,2280],"name":"IVault","nameLocation":"529:6:7","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[847,1748],"documentation":{"id":819,"nodeType":"StructuredDocumentation","src":"631:41:7","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":828,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:7","nodeType":"FunctionDefinition","overrides":{"id":823,"nodeType":"OverrideSpecifier","overrides":[{"id":821,"name":"IVaultAdmin","nameLocations":["717:11:7"],"nodeType":"IdentifierPath","referencedDeclaration":1119,"src":"717:11:7"},{"id":822,"name":"IVaultExtension","nameLocations":["730:15:7"],"nodeType":"IdentifierPath","referencedDeclaration":2144,"src":"730:15:7"}],"src":"708:38:7"},"parameters":{"id":820,"nodeType":"ParameterList","parameters":[],"src":"691:2:7"},"returnParameters":{"id":827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":826,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":828,"src":"756:6:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":825,"nodeType":"UserDefinedTypeName","pathNode":{"id":824,"name":"IVault","nameLocations":["756:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"756:6:7"},"referencedDeclaration":829,"src":"756:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:7"},"scope":829,"src":"677:87:7","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":830,"src":"519:247:7","usedErrors":[38,1131,1136,1141,1146,1155,1161,1164,1167,1170,1173,1176,1179,1188,1191,1194,1197,1200,1203,1206,1209,1212,1215,1218,1221,1224,1227,1230,1236,1243,1250,1253,1256,1266,1276,1283,1286,1289,1292,1302,1312,1319,1322,1325,1328,1331,1334,1337,1340,1343,1348,1353,1358,1361,1364,1367,1370,1373,1378,1383,1388,1394,1400,1403,1411,1417,1423,1426,1429,1432,1437,1447,1457,1464,1467,1470,1473,1476,1479,1482,1485],"usedEvents":[1524,1529,1548,1560,1572,1590,1608,1613,1616,1619,1626,1633,1640,1647,1654,1660,1666,1678,1688,1698,1710,1715,1724]}],"src":"46:721:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[251],"IERC4626":[7087],"IProtocolFeeController":[791],"IVault":[829],"IVaultAdmin":[1119]},"id":1120,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":831,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":833,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1120,"sourceUnit":7088,"src":"72:75:8","symbolAliases":[{"foreign":{"id":832,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7087,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":835,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1120,"sourceUnit":792,"src":"149:70:8","symbolAliases":[{"foreign":{"id":834,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":791,"src":"158:22:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":837,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1120,"sourceUnit":252,"src":"220:48:8","symbolAliases":[{"foreign":{"id":836,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"229:11:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":839,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1120,"sourceUnit":830,"src":"269:38:8","symbolAliases":[{"foreign":{"id":838,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"278:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":840,"nodeType":"StructuredDocumentation","src":"309:276:8","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":1119,"linearizedBaseContracts":[1119],"name":"IVaultAdmin","nameLocation":"596:11:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":841,"nodeType":"StructuredDocumentation","src":"841:206:8","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":847,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:8","nodeType":"FunctionDefinition","parameters":{"id":842,"nodeType":"ParameterList","parameters":[],"src":"1066:2:8"},"returnParameters":{"id":846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":845,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":847,"src":"1092:6:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":844,"nodeType":"UserDefinedTypeName","pathNode":{"id":843,"name":"IVault","nameLocations":["1092:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"1092:6:8"},"referencedDeclaration":829,"src":"1092:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:8"},"scope":1119,"src":"1052:48:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":848,"nodeType":"StructuredDocumentation","src":"1106:326:8","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":853,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:8","nodeType":"FunctionDefinition","parameters":{"id":849,"nodeType":"ParameterList","parameters":[],"src":"1467:2:8"},"returnParameters":{"id":852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":851,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:8","nodeType":"VariableDeclaration","scope":853,"src":"1493:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":850,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:8","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:8"},"scope":1119,"src":"1437:83:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":854,"nodeType":"StructuredDocumentation","src":"1526:414:8","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":859,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:8","nodeType":"FunctionDefinition","parameters":{"id":855,"nodeType":"ParameterList","parameters":[],"src":"1977:2:8"},"returnParameters":{"id":858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":857,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:8","nodeType":"VariableDeclaration","scope":859,"src":"2003:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":856,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:8","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:8"},"scope":1119,"src":"1945:87:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":860,"nodeType":"StructuredDocumentation","src":"2038:321:8","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":865,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:8","nodeType":"FunctionDefinition","parameters":{"id":861,"nodeType":"ParameterList","parameters":[],"src":"2395:2:8"},"returnParameters":{"id":864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":863,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:8","nodeType":"VariableDeclaration","scope":865,"src":"2421:26:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":862,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:8","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:8"},"scope":1119,"src":"2364:85:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":866,"nodeType":"StructuredDocumentation","src":"2455:193:8","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":871,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:8","nodeType":"FunctionDefinition","parameters":{"id":867,"nodeType":"ParameterList","parameters":[],"src":"2682:2:8"},"returnParameters":{"id":870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":869,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:8","nodeType":"VariableDeclaration","scope":871,"src":"2708:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":868,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:8"},"scope":1119,"src":"2653:74:8","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":872,"nodeType":"StructuredDocumentation","src":"2733:129:8","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":877,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:8","nodeType":"FunctionDefinition","parameters":{"id":873,"nodeType":"ParameterList","parameters":[],"src":"2896:2:8"},"returnParameters":{"id":876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":875,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:8","nodeType":"VariableDeclaration","scope":877,"src":"2922:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":874,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:8"},"scope":1119,"src":"2867:74:8","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":878,"nodeType":"StructuredDocumentation","src":"2947:439:8","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":883,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:8","nodeType":"FunctionDefinition","parameters":{"id":879,"nodeType":"ParameterList","parameters":[],"src":"3425:2:8"},"returnParameters":{"id":882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":881,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:8","nodeType":"VariableDeclaration","scope":883,"src":"3451:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":880,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:8"},"scope":1119,"src":"3391:92:8","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":884,"nodeType":"StructuredDocumentation","src":"3489:502:8","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":889,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:8","nodeType":"FunctionDefinition","parameters":{"id":885,"nodeType":"ParameterList","parameters":[],"src":"4032:2:8"},"returnParameters":{"id":888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":887,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:8","nodeType":"VariableDeclaration","scope":889,"src":"4058:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":886,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:8"},"scope":1119,"src":"3996:96:8","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":890,"nodeType":"StructuredDocumentation","src":"4098:291:8","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":895,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:8","nodeType":"FunctionDefinition","parameters":{"id":891,"nodeType":"ParameterList","parameters":[],"src":"4424:2:8"},"returnParameters":{"id":894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":893,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:8","nodeType":"VariableDeclaration","scope":895,"src":"4450:26:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":892,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:8"},"scope":1119,"src":"4394:84:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":896,"nodeType":"StructuredDocumentation","src":"4484:271:8","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":901,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:8","nodeType":"FunctionDefinition","parameters":{"id":897,"nodeType":"ParameterList","parameters":[],"src":"4789:2:8"},"returnParameters":{"id":900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":899,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:8","nodeType":"VariableDeclaration","scope":901,"src":"4815:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":898,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:8"},"scope":1119,"src":"4760:82:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":902,"nodeType":"StructuredDocumentation","src":"5069:529:8","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":907,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:8","nodeType":"FunctionDefinition","parameters":{"id":903,"nodeType":"ParameterList","parameters":[],"src":"5625:2:8"},"returnParameters":{"id":906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":905,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:8","nodeType":"VariableDeclaration","scope":907,"src":"5651:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":904,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:8"},"scope":1119,"src":"5603:66:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":908,"nodeType":"StructuredDocumentation","src":"5675:400:8","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":917,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:8","nodeType":"FunctionDefinition","parameters":{"id":909,"nodeType":"ParameterList","parameters":[],"src":"6108:2:8"},"returnParameters":{"id":916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:8","nodeType":"VariableDeclaration","scope":917,"src":"6158:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":910,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":913,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:8","nodeType":"VariableDeclaration","scope":917,"src":"6176:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":912,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:8","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":915,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:8","nodeType":"VariableDeclaration","scope":917,"src":"6208:31:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":914,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:8","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:8"},"scope":1119,"src":"6080:161:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":918,"nodeType":"StructuredDocumentation","src":"6247:517:8","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":921,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:8","nodeType":"FunctionDefinition","parameters":{"id":919,"nodeType":"ParameterList","parameters":[],"src":"6788:2:8"},"returnParameters":{"id":920,"nodeType":"ParameterList","parameters":[],"src":"6799:0:8"},"scope":1119,"src":"6769:31:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":922,"nodeType":"StructuredDocumentation","src":"6806:569:8","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":925,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:8","nodeType":"FunctionDefinition","parameters":{"id":923,"nodeType":"ParameterList","parameters":[],"src":"7401:2:8"},"returnParameters":{"id":924,"nodeType":"ParameterList","parameters":[],"src":"7412:0:8"},"scope":1119,"src":"7380:33:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":926,"nodeType":"StructuredDocumentation","src":"7639:276:8","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":931,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:8","nodeType":"FunctionDefinition","parameters":{"id":929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":928,"mutability":"mutable","name":"pool","nameLocation":"7947:4:8","nodeType":"VariableDeclaration","scope":931,"src":"7939:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":927,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:8"},"returnParameters":{"id":930,"nodeType":"ParameterList","parameters":[],"src":"7961:0:8"},"scope":1119,"src":"7920:42:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":932,"nodeType":"StructuredDocumentation","src":"7968:366:8","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":937,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:8","nodeType":"FunctionDefinition","parameters":{"id":935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":934,"mutability":"mutable","name":"pool","nameLocation":"8368:4:8","nodeType":"VariableDeclaration","scope":937,"src":"8360:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":933,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:8"},"returnParameters":{"id":936,"nodeType":"ParameterList","parameters":[],"src":"8382:0:8"},"scope":1119,"src":"8339:44:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":938,"nodeType":"StructuredDocumentation","src":"8606:520:8","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":945,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:8","nodeType":"FunctionDefinition","parameters":{"id":943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":940,"mutability":"mutable","name":"pool","nameLocation":"9175:4:8","nodeType":"VariableDeclaration","scope":945,"src":"9167:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":939,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":942,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:8","nodeType":"VariableDeclaration","scope":945,"src":"9181:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":941,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:8"},"returnParameters":{"id":944,"nodeType":"ParameterList","parameters":[],"src":"9216:0:8"},"scope":1119,"src":"9131:86:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":946,"nodeType":"StructuredDocumentation","src":"9223:463:8","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":957,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:8","nodeType":"FunctionDefinition","parameters":{"id":949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":948,"mutability":"mutable","name":"pool","nameLocation":"9738:4:8","nodeType":"VariableDeclaration","scope":957,"src":"9730:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":947,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:8"},"returnParameters":{"id":956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":952,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:8","nodeType":"VariableDeclaration","scope":957,"src":"9767:31:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":950,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":951,"nodeType":"ArrayTypeName","src":"9767:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":955,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:8","nodeType":"VariableDeclaration","scope":957,"src":"9800:32:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":953,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":954,"nodeType":"ArrayTypeName","src":"9800:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:8"},"scope":1119,"src":"9691:143:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":958,"nodeType":"StructuredDocumentation","src":"9840:755:8","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":965,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:8","nodeType":"FunctionDefinition","parameters":{"id":963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":960,"mutability":"mutable","name":"pool","nameLocation":"10650:4:8","nodeType":"VariableDeclaration","scope":965,"src":"10642:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":959,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":962,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:8","nodeType":"VariableDeclaration","scope":965,"src":"10656:37:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":961,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:8"},"returnParameters":{"id":964,"nodeType":"ParameterList","parameters":[],"src":"10703:0:8"},"scope":1119,"src":"10600:104:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":966,"nodeType":"StructuredDocumentation","src":"10710:760:8","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":973,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:8","nodeType":"FunctionDefinition","parameters":{"id":971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":968,"mutability":"mutable","name":"pool","nameLocation":"11526:4:8","nodeType":"VariableDeclaration","scope":973,"src":"11518:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":967,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":970,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:8","nodeType":"VariableDeclaration","scope":973,"src":"11532:38:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":969,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:8"},"returnParameters":{"id":972,"nodeType":"ParameterList","parameters":[],"src":"11580:0:8"},"scope":1119,"src":"11475:106:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":974,"nodeType":"StructuredDocumentation","src":"11587:249:8","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":980,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:8","nodeType":"FunctionDefinition","parameters":{"id":978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":977,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:8","nodeType":"VariableDeclaration","scope":980,"src":"11875:47:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"},"typeName":{"id":976,"nodeType":"UserDefinedTypeName","pathNode":{"id":975,"name":"IProtocolFeeController","nameLocations":["11875:22:8"],"nodeType":"IdentifierPath","referencedDeclaration":791,"src":"11875:22:8"},"referencedDeclaration":791,"src":"11875:22:8","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:8"},"returnParameters":{"id":979,"nodeType":"ParameterList","parameters":[],"src":"11932:0:8"},"scope":1119,"src":"11841:92:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":981,"nodeType":"StructuredDocumentation","src":"12160:557:8","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":986,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:8","nodeType":"FunctionDefinition","parameters":{"id":984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":983,"mutability":"mutable","name":"pool","nameLocation":"12758:4:8","nodeType":"VariableDeclaration","scope":986,"src":"12750:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":982,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:8"},"returnParameters":{"id":985,"nodeType":"ParameterList","parameters":[],"src":"12772:0:8"},"scope":1119,"src":"12722:51:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":987,"nodeType":"StructuredDocumentation","src":"12779:409:8","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":992,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:8","nodeType":"FunctionDefinition","parameters":{"id":990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":989,"mutability":"mutable","name":"pool","nameLocation":"13230:4:8","nodeType":"VariableDeclaration","scope":992,"src":"13222:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":988,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:8"},"returnParameters":{"id":991,"nodeType":"ParameterList","parameters":[],"src":"13244:0:8"},"scope":1119,"src":"13193:52:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":993,"nodeType":"StructuredDocumentation","src":"13476:653:8","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":996,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:8","nodeType":"FunctionDefinition","parameters":{"id":994,"nodeType":"ParameterList","parameters":[],"src":"14155:2:8"},"returnParameters":{"id":995,"nodeType":"ParameterList","parameters":[],"src":"14166:0:8"},"scope":1119,"src":"14134:33:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":997,"nodeType":"StructuredDocumentation","src":"14173:223:8","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":1000,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:8","nodeType":"FunctionDefinition","parameters":{"id":998,"nodeType":"ParameterList","parameters":[],"src":"14433:2:8"},"returnParameters":{"id":999,"nodeType":"ParameterList","parameters":[],"src":"14444:0:8"},"scope":1119,"src":"14401:44:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1001,"nodeType":"StructuredDocumentation","src":"14451:166:8","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":1004,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:8","nodeType":"FunctionDefinition","parameters":{"id":1002,"nodeType":"ParameterList","parameters":[],"src":"14642:2:8"},"returnParameters":{"id":1003,"nodeType":"ParameterList","parameters":[],"src":"14653:0:8"},"scope":1119,"src":"14622:32:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1005,"nodeType":"StructuredDocumentation","src":"14881:590:8","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":1010,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:8","nodeType":"FunctionDefinition","parameters":{"id":1006,"nodeType":"ParameterList","parameters":[],"src":"15501:2:8"},"returnParameters":{"id":1009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1008,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:8","nodeType":"VariableDeclaration","scope":1010,"src":"15527:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1007,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:8"},"scope":1119,"src":"15476:71:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1011,"nodeType":"StructuredDocumentation","src":"15553:619:8","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":1014,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:8","nodeType":"FunctionDefinition","parameters":{"id":1012,"nodeType":"ParameterList","parameters":[],"src":"16203:2:8"},"returnParameters":{"id":1013,"nodeType":"ParameterList","parameters":[],"src":"16214:0:8"},"scope":1119,"src":"16177:38:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1015,"nodeType":"StructuredDocumentation","src":"16221:545:8","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":1018,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:8","nodeType":"FunctionDefinition","parameters":{"id":1016,"nodeType":"ParameterList","parameters":[],"src":"16799:2:8"},"returnParameters":{"id":1017,"nodeType":"ParameterList","parameters":[],"src":"16810:0:8"},"scope":1119,"src":"16771:40:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1019,"nodeType":"StructuredDocumentation","src":"16817:860:8","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":1035,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:8","nodeType":"FunctionDefinition","parameters":{"id":1031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1022,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:8","nodeType":"VariableDeclaration","scope":1035,"src":"17717:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1021,"nodeType":"UserDefinedTypeName","pathNode":{"id":1020,"name":"IERC4626","nameLocations":["17717:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"17717:8:8"},"referencedDeclaration":7087,"src":"17717:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1024,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:8","nodeType":"VariableDeclaration","scope":1035,"src":"17748:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1023,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1026,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:8","nodeType":"VariableDeclaration","scope":1035,"src":"17785:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1025,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1028,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:8","nodeType":"VariableDeclaration","scope":1035,"src":"17819:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1027,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1030,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:8","nodeType":"VariableDeclaration","scope":1035,"src":"17852:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1029,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:8"},"returnParameters":{"id":1034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1033,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:8","nodeType":"VariableDeclaration","scope":1035,"src":"17896:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1032,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:8"},"scope":1119,"src":"17682:236:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1036,"nodeType":"StructuredDocumentation","src":"17924:1010:8","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":1054,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:8","nodeType":"FunctionDefinition","parameters":{"id":1048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1039,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:8","nodeType":"VariableDeclaration","scope":1054,"src":"18978:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1038,"nodeType":"UserDefinedTypeName","pathNode":{"id":1037,"name":"IERC4626","nameLocations":["18978:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"18978:8:8"},"referencedDeclaration":7087,"src":"18978:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1041,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:8","nodeType":"VariableDeclaration","scope":1054,"src":"19009:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1040,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1043,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:8","nodeType":"VariableDeclaration","scope":1054,"src":"19051:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1042,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1045,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:8","nodeType":"VariableDeclaration","scope":1054,"src":"19090:26:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1044,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1047,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:8","nodeType":"VariableDeclaration","scope":1054,"src":"19126:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1046,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:8"},"returnParameters":{"id":1053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1050,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:8","nodeType":"VariableDeclaration","scope":1054,"src":"19170:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1049,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1052,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:8","nodeType":"VariableDeclaration","scope":1054,"src":"19199:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1051,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:8"},"scope":1119,"src":"18939:286:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1055,"nodeType":"StructuredDocumentation","src":"19231:1458:8","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":1071,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:8","nodeType":"FunctionDefinition","parameters":{"id":1065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1058,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:8","nodeType":"VariableDeclaration","scope":1071,"src":"20738:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1057,"nodeType":"UserDefinedTypeName","pathNode":{"id":1056,"name":"IERC4626","nameLocations":["20738:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"20738:8:8"},"referencedDeclaration":7087,"src":"20738:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1060,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:8","nodeType":"VariableDeclaration","scope":1071,"src":"20769:22:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1059,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1062,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:8","nodeType":"VariableDeclaration","scope":1071,"src":"20801:33:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1061,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1064,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:8","nodeType":"VariableDeclaration","scope":1071,"src":"20844:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1063,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:8"},"returnParameters":{"id":1070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1067,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:8","nodeType":"VariableDeclaration","scope":1071,"src":"20899:35:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1066,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1069,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:8","nodeType":"VariableDeclaration","scope":1071,"src":"20936:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1068,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:8"},"scope":1119,"src":"20694:276:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1072,"nodeType":"StructuredDocumentation","src":"20976:382:8","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":1080,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:8","nodeType":"FunctionDefinition","parameters":{"id":1076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1075,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:8","nodeType":"VariableDeclaration","scope":1080,"src":"21387:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1074,"nodeType":"UserDefinedTypeName","pathNode":{"id":1073,"name":"IERC4626","nameLocations":["21387:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"21387:8:8"},"referencedDeclaration":7087,"src":"21387:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:8"},"returnParameters":{"id":1079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1078,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:8","nodeType":"VariableDeclaration","scope":1080,"src":"21433:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1077,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:8"},"scope":1119,"src":"21363:95:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1081,"nodeType":"StructuredDocumentation","src":"21464:441:8","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":1091,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:8","nodeType":"FunctionDefinition","parameters":{"id":1087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1084,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:8","nodeType":"VariableDeclaration","scope":1091,"src":"21949:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1083,"nodeType":"UserDefinedTypeName","pathNode":{"id":1082,"name":"IERC4626","nameLocations":["21949:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"21949:8:8"},"referencedDeclaration":7087,"src":"21949:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1086,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:8","nodeType":"VariableDeclaration","scope":1091,"src":"21980:22:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1085,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:8"},"returnParameters":{"id":1090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1089,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:8","nodeType":"VariableDeclaration","scope":1091,"src":"22032:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1088,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:8"},"scope":1119,"src":"21910:143:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1092,"nodeType":"StructuredDocumentation","src":"22059:281:8","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":1100,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:8","nodeType":"FunctionDefinition","parameters":{"id":1096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1095,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:8","nodeType":"VariableDeclaration","scope":1100,"src":"22375:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1094,"nodeType":"UserDefinedTypeName","pathNode":{"id":1093,"name":"IERC4626","nameLocations":["22375:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"22375:8:8"},"referencedDeclaration":7087,"src":"22375:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:8"},"returnParameters":{"id":1099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1098,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:8","nodeType":"VariableDeclaration","scope":1100,"src":"22421:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1097,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:8"},"scope":1119,"src":"22345:98:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1101,"nodeType":"StructuredDocumentation","src":"22449:521:8","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":1111,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:8","nodeType":"FunctionDefinition","parameters":{"id":1105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1104,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:8","nodeType":"VariableDeclaration","scope":1111,"src":"23010:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1103,"nodeType":"UserDefinedTypeName","pathNode":{"id":1102,"name":"IERC4626","nameLocations":["23010:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"23010:8:8"},"referencedDeclaration":7087,"src":"23010:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:8"},"returnParameters":{"id":1110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1107,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:8","nodeType":"VariableDeclaration","scope":1111,"src":"23061:28:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1106,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1109,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:8","nodeType":"VariableDeclaration","scope":1111,"src":"23091:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1108,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:8"},"scope":1119,"src":"22975:143:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1112,"nodeType":"StructuredDocumentation","src":"23342:202:8","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":1118,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:8","nodeType":"FunctionDefinition","parameters":{"id":1116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1115,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:8","nodeType":"VariableDeclaration","scope":1118,"src":"23572:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"},"typeName":{"id":1114,"nodeType":"UserDefinedTypeName","pathNode":{"id":1113,"name":"IAuthorizer","nameLocations":["23572:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":251,"src":"23572:11:8"},"referencedDeclaration":251,"src":"23572:11:8","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:8"},"returnParameters":{"id":1117,"nodeType":"ParameterList","parameters":[],"src":"23607:0:8"},"scope":1119,"src":"23549:59:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1120,"src":"586:23024:8","usedErrors":[],"usedEvents":[]}],"src":"46:23565:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[7165],"IERC4626":[7087],"IVaultErrors":[1486]},"id":1487,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1121,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1123,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1487,"sourceUnit":7088,"src":"72:75:9","symbolAliases":[{"foreign":{"id":1122,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7087,"src":"81:8:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1125,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1487,"sourceUnit":7166,"src":"148:72:9","symbolAliases":[{"foreign":{"id":1124,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"157:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1126,"nodeType":"StructuredDocumentation","src":"222:94:9","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1486,"linearizedBaseContracts":[1486],"name":"IVaultErrors","nameLocation":"326:12:9","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1127,"nodeType":"StructuredDocumentation","src":"576:149:9","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":1131,"name":"PoolAlreadyRegistered","nameLocation":"736:21:9","nodeType":"ErrorDefinition","parameters":{"id":1130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1129,"mutability":"mutable","name":"pool","nameLocation":"766:4:9","nodeType":"VariableDeclaration","scope":1131,"src":"758:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1128,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:9"},"src":"730:42:9"},{"documentation":{"id":1132,"nodeType":"StructuredDocumentation","src":"778:149:9","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":1136,"name":"PoolAlreadyInitialized","nameLocation":"938:22:9","nodeType":"ErrorDefinition","parameters":{"id":1135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1134,"mutability":"mutable","name":"pool","nameLocation":"969:4:9","nodeType":"VariableDeclaration","scope":1136,"src":"961:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1133,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:9"},"src":"932:43:9"},{"documentation":{"id":1137,"nodeType":"StructuredDocumentation","src":"981:99:9","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":1141,"name":"PoolNotRegistered","nameLocation":"1091:17:9","nodeType":"ErrorDefinition","parameters":{"id":1140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1139,"mutability":"mutable","name":"pool","nameLocation":"1117:4:9","nodeType":"VariableDeclaration","scope":1141,"src":"1109:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1138,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:9"},"src":"1085:38:9"},{"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"1129:112:9","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":1146,"name":"PoolNotInitialized","nameLocation":"1252:18:9","nodeType":"ErrorDefinition","parameters":{"id":1145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1144,"mutability":"mutable","name":"pool","nameLocation":"1279:4:9","nodeType":"VariableDeclaration","scope":1146,"src":"1271:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1143,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:9"},"src":"1246:39:9"},{"documentation":{"id":1147,"nodeType":"StructuredDocumentation","src":"1291:274:9","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":1155,"name":"HookRegistrationFailed","nameLocation":"1576:22:9","nodeType":"ErrorDefinition","parameters":{"id":1154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1149,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:9","nodeType":"VariableDeclaration","scope":1155,"src":"1599:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1148,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1151,"mutability":"mutable","name":"pool","nameLocation":"1634:4:9","nodeType":"VariableDeclaration","scope":1155,"src":"1626:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1150,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1153,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:9","nodeType":"VariableDeclaration","scope":1155,"src":"1640:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1152,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:9"},"src":"1570:91:9"},{"documentation":{"id":1156,"nodeType":"StructuredDocumentation","src":"1667:136:9","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":1161,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:9","nodeType":"ErrorDefinition","parameters":{"id":1160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1159,"mutability":"mutable","name":"token","nameLocation":"1844:5:9","nodeType":"VariableDeclaration","scope":1161,"src":"1837:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1158,"nodeType":"UserDefinedTypeName","pathNode":{"id":1157,"name":"IERC20","nameLocations":["1837:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"1837:6:9"},"referencedDeclaration":7165,"src":"1837:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:9"},"src":"1808:43:9"},{"documentation":{"id":1162,"nodeType":"StructuredDocumentation","src":"1857:57:9","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":1164,"name":"MinTokens","nameLocation":"1925:9:9","nodeType":"ErrorDefinition","parameters":{"id":1163,"nodeType":"ParameterList","parameters":[],"src":"1934:2:9"},"src":"1919:18:9"},{"documentation":{"id":1165,"nodeType":"StructuredDocumentation","src":"1943:57:9","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":1167,"name":"MaxTokens","nameLocation":"2011:9:9","nodeType":"ErrorDefinition","parameters":{"id":1166,"nodeType":"ParameterList","parameters":[],"src":"2020:2:9"},"src":"2005:18:9"},{"documentation":{"id":1168,"nodeType":"StructuredDocumentation","src":"2029:61:9","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":1170,"name":"InvalidToken","nameLocation":"2101:12:9","nodeType":"ErrorDefinition","parameters":{"id":1169,"nodeType":"ParameterList","parameters":[],"src":"2113:2:9"},"src":"2095:21:9"},{"documentation":{"id":1171,"nodeType":"StructuredDocumentation","src":"2122:86:9","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":1173,"name":"InvalidTokenType","nameLocation":"2219:16:9","nodeType":"ErrorDefinition","parameters":{"id":1172,"nodeType":"ParameterList","parameters":[],"src":"2235:2:9"},"src":"2213:25:9"},{"documentation":{"id":1174,"nodeType":"StructuredDocumentation","src":"2244:76:9","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":1176,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:9","nodeType":"ErrorDefinition","parameters":{"id":1175,"nodeType":"ParameterList","parameters":[],"src":"2356:2:9"},"src":"2325:34:9"},{"documentation":{"id":1177,"nodeType":"StructuredDocumentation","src":"2365:64:9","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":1179,"name":"InvalidTokenDecimals","nameLocation":"2440:20:9","nodeType":"ErrorDefinition","parameters":{"id":1178,"nodeType":"ParameterList","parameters":[],"src":"2460:2:9"},"src":"2434:29:9"},{"documentation":{"id":1180,"nodeType":"StructuredDocumentation","src":"2469:287:9","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":1188,"name":"TokensMismatch","nameLocation":"2767:14:9","nodeType":"ErrorDefinition","parameters":{"id":1187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1182,"mutability":"mutable","name":"pool","nameLocation":"2790:4:9","nodeType":"VariableDeclaration","scope":1188,"src":"2782:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1181,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1184,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:9","nodeType":"VariableDeclaration","scope":1188,"src":"2796:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1183,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1186,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:9","nodeType":"VariableDeclaration","scope":1188,"src":"2819:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1185,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:9"},"src":"2761:79:9"},{"documentation":{"id":1189,"nodeType":"StructuredDocumentation","src":"3071:85:9","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":1191,"name":"BalanceNotSettled","nameLocation":"3167:17:9","nodeType":"ErrorDefinition","parameters":{"id":1190,"nodeType":"ParameterList","parameters":[],"src":"3184:2:9"},"src":"3161:26:9"},{"documentation":{"id":1192,"nodeType":"StructuredDocumentation","src":"3193:97:9","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":1194,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:9","nodeType":"ErrorDefinition","parameters":{"id":1193,"nodeType":"ParameterList","parameters":[],"src":"3319:2:9"},"src":"3295:27:9"},{"documentation":{"id":1195,"nodeType":"StructuredDocumentation","src":"3328:105:9","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":1197,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:9","nodeType":"ErrorDefinition","parameters":{"id":1196,"nodeType":"ParameterList","parameters":[],"src":"3468:2:9"},"src":"3438:33:9"},{"documentation":{"id":1198,"nodeType":"StructuredDocumentation","src":"3477:105:9","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":1200,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:9","nodeType":"ErrorDefinition","parameters":{"id":1199,"nodeType":"ParameterList","parameters":[],"src":"3613:2:9"},"src":"3587:29:9"},{"documentation":{"id":1201,"nodeType":"StructuredDocumentation","src":"3622:104:9","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":1203,"name":"AfterSwapHookFailed","nameLocation":"3737:19:9","nodeType":"ErrorDefinition","parameters":{"id":1202,"nodeType":"ParameterList","parameters":[],"src":"3756:2:9"},"src":"3731:28:9"},{"documentation":{"id":1204,"nodeType":"StructuredDocumentation","src":"3765:111:9","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":1206,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:9","nodeType":"ErrorDefinition","parameters":{"id":1205,"nodeType":"ParameterList","parameters":[],"src":"3913:2:9"},"src":"3881:35:9"},{"documentation":{"id":1207,"nodeType":"StructuredDocumentation","src":"3922:110:9","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":1209,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:9","nodeType":"ErrorDefinition","parameters":{"id":1208,"nodeType":"ParameterList","parameters":[],"src":"4068:2:9"},"src":"4037:34:9"},{"documentation":{"id":1210,"nodeType":"StructuredDocumentation","src":"4077:113:9","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":1212,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:9","nodeType":"ErrorDefinition","parameters":{"id":1211,"nodeType":"ParameterList","parameters":[],"src":"4229:2:9"},"src":"4195:37:9"},{"documentation":{"id":1213,"nodeType":"StructuredDocumentation","src":"4238:112:9","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":1215,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:9","nodeType":"ErrorDefinition","parameters":{"id":1214,"nodeType":"ParameterList","parameters":[],"src":"4388:2:9"},"src":"4355:36:9"},{"documentation":{"id":1216,"nodeType":"StructuredDocumentation","src":"4397:116:9","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":1218,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:9","nodeType":"ErrorDefinition","parameters":{"id":1217,"nodeType":"ParameterList","parameters":[],"src":"4555:2:9"},"src":"4518:40:9"},{"documentation":{"id":1219,"nodeType":"StructuredDocumentation","src":"4564:115:9","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":1221,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:9","nodeType":"ErrorDefinition","parameters":{"id":1220,"nodeType":"ParameterList","parameters":[],"src":"4720:2:9"},"src":"4684:39:9"},{"documentation":{"id":1222,"nodeType":"StructuredDocumentation","src":"4729:115:9","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":1224,"name":"RouterNotTrusted","nameLocation":"4855:16:9","nodeType":"ErrorDefinition","parameters":{"id":1223,"nodeType":"ParameterList","parameters":[],"src":"4871:2:9"},"src":"4849:25:9"},{"documentation":{"id":1225,"nodeType":"StructuredDocumentation","src":"5097:47:9","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":1227,"name":"AmountGivenZero","nameLocation":"5155:15:9","nodeType":"ErrorDefinition","parameters":{"id":1226,"nodeType":"ParameterList","parameters":[],"src":"5170:2:9"},"src":"5149:24:9"},{"documentation":{"id":1228,"nodeType":"StructuredDocumentation","src":"5179:58:9","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":1230,"name":"CannotSwapSameToken","nameLocation":"5248:19:9","nodeType":"ErrorDefinition","parameters":{"id":1229,"nodeType":"ParameterList","parameters":[],"src":"5267:2:9"},"src":"5242:28:9"},{"documentation":{"id":1231,"nodeType":"StructuredDocumentation","src":"5276:137:9","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":1236,"name":"TokenNotRegistered","nameLocation":"5424:18:9","nodeType":"ErrorDefinition","parameters":{"id":1235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1234,"mutability":"mutable","name":"token","nameLocation":"5450:5:9","nodeType":"VariableDeclaration","scope":1236,"src":"5443:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1233,"nodeType":"UserDefinedTypeName","pathNode":{"id":1232,"name":"IERC20","nameLocations":["5443:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"5443:6:9"},"referencedDeclaration":7165,"src":"5443:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:9"},"src":"5418:39:9"},{"documentation":{"id":1237,"nodeType":"StructuredDocumentation","src":"5463:215:9","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":1243,"name":"SwapLimit","nameLocation":"5689:9:9","nodeType":"ErrorDefinition","parameters":{"id":1242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1239,"mutability":"mutable","name":"amount","nameLocation":"5707:6:9","nodeType":"VariableDeclaration","scope":1243,"src":"5699:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1238,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1241,"mutability":"mutable","name":"limit","nameLocation":"5723:5:9","nodeType":"VariableDeclaration","scope":1243,"src":"5715:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1240,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:9"},"src":"5683:47:9"},{"documentation":{"id":1244,"nodeType":"StructuredDocumentation","src":"5736:228:9","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":1250,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:9","nodeType":"ErrorDefinition","parameters":{"id":1249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1246,"mutability":"mutable","name":"amount","nameLocation":"6005:6:9","nodeType":"VariableDeclaration","scope":1250,"src":"5997:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1245,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1248,"mutability":"mutable","name":"limit","nameLocation":"6021:5:9","nodeType":"VariableDeclaration","scope":1250,"src":"6013:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1247,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:9"},"src":"5969:59:9"},{"documentation":{"id":1251,"nodeType":"StructuredDocumentation","src":"6034:87:9","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":1253,"name":"TradeAmountTooSmall","nameLocation":"6132:19:9","nodeType":"ErrorDefinition","parameters":{"id":1252,"nodeType":"ParameterList","parameters":[],"src":"6151:2:9"},"src":"6126:28:9"},{"documentation":{"id":1254,"nodeType":"StructuredDocumentation","src":"6381:45:9","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":1256,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:9","nodeType":"ErrorDefinition","parameters":{"id":1255,"nodeType":"ParameterList","parameters":[],"src":"6460:2:9"},"src":"6431:32:9"},{"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"6469:264:9","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":1266,"name":"AmountInAboveMax","nameLocation":"6744:16:9","nodeType":"ErrorDefinition","parameters":{"id":1265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1260,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:9","nodeType":"VariableDeclaration","scope":1266,"src":"6761:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1259,"nodeType":"UserDefinedTypeName","pathNode":{"id":1258,"name":"IERC20","nameLocations":["6761:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"6761:6:9"},"referencedDeclaration":7165,"src":"6761:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1262,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:9","nodeType":"VariableDeclaration","scope":1266,"src":"6777:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1261,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1264,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:9","nodeType":"VariableDeclaration","scope":1266,"src":"6795:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1263,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:9"},"src":"6738:78:9"},{"documentation":{"id":1267,"nodeType":"StructuredDocumentation","src":"6822:269:9","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":1276,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:9","nodeType":"ErrorDefinition","parameters":{"id":1275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1270,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:9","nodeType":"VariableDeclaration","scope":1276,"src":"7131:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1269,"nodeType":"UserDefinedTypeName","pathNode":{"id":1268,"name":"IERC20","nameLocations":["7131:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"7131:6:9"},"referencedDeclaration":7165,"src":"7131:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1272,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:9","nodeType":"VariableDeclaration","scope":1276,"src":"7147:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1271,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1274,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:9","nodeType":"VariableDeclaration","scope":1276,"src":"7165:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1273,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:9"},"src":"7096:90:9"},{"documentation":{"id":1277,"nodeType":"StructuredDocumentation","src":"7192:245:9","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":1283,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:9","nodeType":"ErrorDefinition","parameters":{"id":1282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1279,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:9","nodeType":"VariableDeclaration","scope":1283,"src":"7469:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1278,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1281,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:9","nodeType":"VariableDeclaration","scope":1283,"src":"7488:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1280,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:9"},"src":"7442:68:9"},{"documentation":{"id":1284,"nodeType":"StructuredDocumentation","src":"7516:75:9","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":1286,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:9","nodeType":"ErrorDefinition","parameters":{"id":1285,"nodeType":"ParameterList","parameters":[],"src":"7634:2:9"},"src":"7596:41:9"},{"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"7643:68:9","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":1289,"name":"DoesNotSupportDonation","nameLocation":"7722:22:9","nodeType":"ErrorDefinition","parameters":{"id":1288,"nodeType":"ParameterList","parameters":[],"src":"7744:2:9"},"src":"7716:31:9"},{"documentation":{"id":1290,"nodeType":"StructuredDocumentation","src":"7977:48:9","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":1292,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:9","nodeType":"ErrorDefinition","parameters":{"id":1291,"nodeType":"ParameterList","parameters":[],"src":"8062:2:9"},"src":"8030:35:9"},{"documentation":{"id":1293,"nodeType":"StructuredDocumentation","src":"8071:269:9","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":1302,"name":"AmountOutBelowMin","nameLocation":"8351:17:9","nodeType":"ErrorDefinition","parameters":{"id":1301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1296,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:9","nodeType":"VariableDeclaration","scope":1302,"src":"8369:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1295,"nodeType":"UserDefinedTypeName","pathNode":{"id":1294,"name":"IERC20","nameLocations":["8369:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"8369:6:9"},"referencedDeclaration":7165,"src":"8369:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1298,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:9","nodeType":"VariableDeclaration","scope":1302,"src":"8386:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1297,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1300,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:9","nodeType":"VariableDeclaration","scope":1302,"src":"8405:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1299,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:9"},"src":"8345:82:9"},{"documentation":{"id":1303,"nodeType":"StructuredDocumentation","src":"8433:276:9","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":1312,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:9","nodeType":"ErrorDefinition","parameters":{"id":1311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1306,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:9","nodeType":"VariableDeclaration","scope":1312,"src":"8750:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1305,"nodeType":"UserDefinedTypeName","pathNode":{"id":1304,"name":"IERC20","nameLocations":["8750:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"8750:6:9"},"referencedDeclaration":7165,"src":"8750:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1308,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:9","nodeType":"VariableDeclaration","scope":1312,"src":"8767:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1307,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1310,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:9","nodeType":"VariableDeclaration","scope":1312,"src":"8786:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1309,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:9"},"src":"8714:94:9"},{"documentation":{"id":1313,"nodeType":"StructuredDocumentation","src":"8814:228:9","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":1319,"name":"BptAmountInAboveMax","nameLocation":"9053:19:9","nodeType":"ErrorDefinition","parameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1315,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:9","nodeType":"VariableDeclaration","scope":1319,"src":"9073:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1314,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1317,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:9","nodeType":"VariableDeclaration","scope":1319,"src":"9091:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1316,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:9"},"src":"9047:65:9"},{"documentation":{"id":1320,"nodeType":"StructuredDocumentation","src":"9118:77:9","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":1322,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:9","nodeType":"ErrorDefinition","parameters":{"id":1321,"nodeType":"ParameterList","parameters":[],"src":"9241:2:9"},"src":"9200:44:9"},{"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"9463:332:9","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":1325,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:9","nodeType":"ErrorDefinition","parameters":{"id":1324,"nodeType":"ParameterList","parameters":[],"src":"9838:2:9"},"src":"9800:41:9"},{"documentation":{"id":1326,"nodeType":"StructuredDocumentation","src":"9847:430:9","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":1328,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:9","nodeType":"ErrorDefinition","parameters":{"id":1327,"nodeType":"ParameterList","parameters":[],"src":"10311:2:9"},"src":"10282:32:9"},{"documentation":{"id":1329,"nodeType":"StructuredDocumentation","src":"10320:433:9","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":1331,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:9","nodeType":"ErrorDefinition","parameters":{"id":1330,"nodeType":"ParameterList","parameters":[],"src":"10788:2:9"},"src":"10758:33:9"},{"documentation":{"id":1332,"nodeType":"StructuredDocumentation","src":"10797:646:9","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":1334,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:9","nodeType":"ErrorDefinition","parameters":{"id":1333,"nodeType":"ParameterList","parameters":[],"src":"11473:2:9"},"src":"11448:28:9"},{"documentation":{"id":1335,"nodeType":"StructuredDocumentation","src":"11482:107:9","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":1337,"name":"PercentageAboveMax","nameLocation":"11600:18:9","nodeType":"ErrorDefinition","parameters":{"id":1336,"nodeType":"ParameterList","parameters":[],"src":"11618:2:9"},"src":"11594:27:9"},{"documentation":{"id":1338,"nodeType":"StructuredDocumentation","src":"11842:78:9","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":1340,"name":"QueriesDisabled","nameLocation":"11931:15:9","nodeType":"ErrorDefinition","parameters":{"id":1339,"nodeType":"ParameterList","parameters":[],"src":"11946:2:9"},"src":"11925:24:9"},{"documentation":{"id":1341,"nodeType":"StructuredDocumentation","src":"11955:84:9","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":1343,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:9","nodeType":"ErrorDefinition","parameters":{"id":1342,"nodeType":"ParameterList","parameters":[],"src":"12076:2:9"},"src":"12044:35:9"},{"documentation":{"id":1344,"nodeType":"StructuredDocumentation","src":"12302:104:9","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":1348,"name":"PoolInRecoveryMode","nameLocation":"12417:18:9","nodeType":"ErrorDefinition","parameters":{"id":1347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1346,"mutability":"mutable","name":"pool","nameLocation":"12444:4:9","nodeType":"VariableDeclaration","scope":1348,"src":"12436:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1345,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:9"},"src":"12411:39:9"},{"documentation":{"id":1349,"nodeType":"StructuredDocumentation","src":"12456:101:9","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":1353,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:9","nodeType":"ErrorDefinition","parameters":{"id":1352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1351,"mutability":"mutable","name":"pool","nameLocation":"12598:4:9","nodeType":"VariableDeclaration","scope":1353,"src":"12590:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1350,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:9"},"src":"12562:42:9"},{"documentation":{"id":1354,"nodeType":"StructuredDocumentation","src":"12828:206:9","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":1358,"name":"SenderIsNotVault","nameLocation":"13045:16:9","nodeType":"ErrorDefinition","parameters":{"id":1357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1356,"mutability":"mutable","name":"sender","nameLocation":"13070:6:9","nodeType":"VariableDeclaration","scope":1358,"src":"13062:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1355,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:9"},"src":"13039:39:9"},{"documentation":{"id":1359,"nodeType":"StructuredDocumentation","src":"13303:79:9","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":1361,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:9","nodeType":"ErrorDefinition","parameters":{"id":1360,"nodeType":"ParameterList","parameters":[],"src":"13425:2:9"},"src":"13387:41:9"},{"documentation":{"id":1362,"nodeType":"StructuredDocumentation","src":"13434:73:9","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":1364,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:9","nodeType":"ErrorDefinition","parameters":{"id":1363,"nodeType":"ParameterList","parameters":[],"src":"13551:2:9"},"src":"13512:42:9"},{"documentation":{"id":1365,"nodeType":"StructuredDocumentation","src":"13560:76:9","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":1367,"name":"VaultPaused","nameLocation":"13647:11:9","nodeType":"ErrorDefinition","parameters":{"id":1366,"nodeType":"ParameterList","parameters":[],"src":"13658:2:9"},"src":"13641:20:9"},{"documentation":{"id":1368,"nodeType":"StructuredDocumentation","src":"13667:73:9","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":1370,"name":"VaultNotPaused","nameLocation":"13751:14:9","nodeType":"ErrorDefinition","parameters":{"id":1369,"nodeType":"ParameterList","parameters":[],"src":"13765:2:9"},"src":"13745:23:9"},{"documentation":{"id":1371,"nodeType":"StructuredDocumentation","src":"13774:79:9","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":1373,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:9","nodeType":"ErrorDefinition","parameters":{"id":1372,"nodeType":"ParameterList","parameters":[],"src":"13887:2:9"},"src":"13858:32:9"},{"documentation":{"id":1374,"nodeType":"StructuredDocumentation","src":"13896:123:9","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":1378,"name":"PoolPaused","nameLocation":"14030:10:9","nodeType":"ErrorDefinition","parameters":{"id":1377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1376,"mutability":"mutable","name":"pool","nameLocation":"14049:4:9","nodeType":"VariableDeclaration","scope":1378,"src":"14041:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1375,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:9"},"src":"14024:31:9"},{"documentation":{"id":1379,"nodeType":"StructuredDocumentation","src":"14061:124:9","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":1383,"name":"PoolNotPaused","nameLocation":"14196:13:9","nodeType":"ErrorDefinition","parameters":{"id":1382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1381,"mutability":"mutable","name":"pool","nameLocation":"14218:4:9","nodeType":"VariableDeclaration","scope":1383,"src":"14210:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1380,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:9"},"src":"14190:34:9"},{"documentation":{"id":1384,"nodeType":"StructuredDocumentation","src":"14230:119:9","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":1388,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:9","nodeType":"ErrorDefinition","parameters":{"id":1387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1386,"mutability":"mutable","name":"pool","nameLocation":"14391:4:9","nodeType":"VariableDeclaration","scope":1388,"src":"14383:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1385,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:9"},"src":"14354:43:9"},{"documentation":{"id":1389,"nodeType":"StructuredDocumentation","src":"14628:163:9","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":1394,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:9","nodeType":"ErrorDefinition","parameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1392,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:9","nodeType":"VariableDeclaration","scope":1394,"src":"14827:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1391,"nodeType":"UserDefinedTypeName","pathNode":{"id":1390,"name":"IERC4626","nameLocations":["14827:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"14827:8:9"},"referencedDeclaration":7087,"src":"14827:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:9"},"src":"14796:54:9"},{"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"14856:159:9","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":1400,"name":"BufferNotInitialized","nameLocation":"15026:20:9","nodeType":"ErrorDefinition","parameters":{"id":1399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1398,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:9","nodeType":"VariableDeclaration","scope":1400,"src":"15047:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1397,"nodeType":"UserDefinedTypeName","pathNode":{"id":1396,"name":"IERC4626","nameLocations":["15047:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"15047:8:9"},"referencedDeclaration":7087,"src":"15047:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:9"},"src":"15020:50:9"},{"documentation":{"id":1401,"nodeType":"StructuredDocumentation","src":"15076:90:9","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":1403,"name":"NotEnoughBufferShares","nameLocation":"15177:21:9","nodeType":"ErrorDefinition","parameters":{"id":1402,"nodeType":"ParameterList","parameters":[],"src":"15198:2:9"},"src":"15171:30:9"},{"documentation":{"id":1404,"nodeType":"StructuredDocumentation","src":"15207:436:9","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":1411,"name":"WrongUnderlyingToken","nameLocation":"15654:20:9","nodeType":"ErrorDefinition","parameters":{"id":1410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1407,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:9","nodeType":"VariableDeclaration","scope":1411,"src":"15675:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1406,"nodeType":"UserDefinedTypeName","pathNode":{"id":1405,"name":"IERC4626","nameLocations":["15675:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"15675:8:9"},"referencedDeclaration":7087,"src":"15675:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1409,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:9","nodeType":"VariableDeclaration","scope":1411,"src":"15698:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1408,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:9"},"src":"15648:75:9"},{"documentation":{"id":1412,"nodeType":"StructuredDocumentation","src":"15729:322:9","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":1417,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:9","nodeType":"ErrorDefinition","parameters":{"id":1416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1415,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:9","nodeType":"VariableDeclaration","scope":1417,"src":"16085:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1414,"nodeType":"UserDefinedTypeName","pathNode":{"id":1413,"name":"IERC4626","nameLocations":["16085:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"16085:8:9"},"referencedDeclaration":7087,"src":"16085:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:9"},"src":"16056:52:9"},{"documentation":{"id":1418,"nodeType":"StructuredDocumentation","src":"16114:183:9","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":1423,"name":"WrapAmountTooSmall","nameLocation":"16308:18:9","nodeType":"ErrorDefinition","parameters":{"id":1422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1421,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:9","nodeType":"VariableDeclaration","scope":1423,"src":"16327:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1420,"nodeType":"UserDefinedTypeName","pathNode":{"id":1419,"name":"IERC4626","nameLocations":["16327:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"16327:8:9"},"referencedDeclaration":7087,"src":"16327:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:9"},"src":"16302:48:9"},{"documentation":{"id":1424,"nodeType":"StructuredDocumentation","src":"16356:70:9","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":1426,"name":"VaultBuffersArePaused","nameLocation":"16437:21:9","nodeType":"ErrorDefinition","parameters":{"id":1425,"nodeType":"ParameterList","parameters":[],"src":"16458:2:9"},"src":"16431:30:9"},{"documentation":{"id":1427,"nodeType":"StructuredDocumentation","src":"16467:58:9","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":1429,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:9","nodeType":"ErrorDefinition","parameters":{"id":1428,"nodeType":"ParameterList","parameters":[],"src":"16563:2:9"},"src":"16530:36:9"},{"documentation":{"id":1430,"nodeType":"StructuredDocumentation","src":"16572:60:9","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":1432,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:9","nodeType":"ErrorDefinition","parameters":{"id":1431,"nodeType":"ParameterList","parameters":[],"src":"16667:2:9"},"src":"16637:33:9"},{"documentation":{"id":1433,"nodeType":"StructuredDocumentation","src":"16676:173:9","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":1437,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:9","nodeType":"ErrorDefinition","parameters":{"id":1436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1435,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:9","nodeType":"VariableDeclaration","scope":1437,"src":"16884:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1434,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:9"},"src":"16854:51:9"},{"documentation":{"id":1438,"nodeType":"StructuredDocumentation","src":"16911:97:9","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":1447,"name":"NotEnoughUnderlying","nameLocation":"17019:19:9","nodeType":"ErrorDefinition","parameters":{"id":1446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1441,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:9","nodeType":"VariableDeclaration","scope":1447,"src":"17039:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1440,"nodeType":"UserDefinedTypeName","pathNode":{"id":1439,"name":"IERC4626","nameLocations":["17039:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"17039:8:9"},"referencedDeclaration":7087,"src":"17039:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1443,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:9","nodeType":"VariableDeclaration","scope":1447,"src":"17062:32:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1442,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1445,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:9","nodeType":"VariableDeclaration","scope":1447,"src":"17096:30:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1444,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:9"},"src":"17013:115:9"},{"documentation":{"id":1448,"nodeType":"StructuredDocumentation","src":"17134:94:9","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":1457,"name":"NotEnoughWrapped","nameLocation":"17239:16:9","nodeType":"ErrorDefinition","parameters":{"id":1456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1451,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:9","nodeType":"VariableDeclaration","scope":1457,"src":"17256:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1450,"nodeType":"UserDefinedTypeName","pathNode":{"id":1449,"name":"IERC4626","nameLocations":["17256:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"17256:8:9"},"referencedDeclaration":7087,"src":"17256:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1453,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:9","nodeType":"VariableDeclaration","scope":1457,"src":"17279:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1452,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1455,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:9","nodeType":"VariableDeclaration","scope":1457,"src":"17310:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1454,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:9"},"src":"17233:106:9"},{"documentation":{"id":1458,"nodeType":"StructuredDocumentation","src":"17345:76:9","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":1464,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:9","nodeType":"ErrorDefinition","parameters":{"id":1463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1460,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:9","nodeType":"VariableDeclaration","scope":1464,"src":"17453:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1459,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1462,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:9","nodeType":"VariableDeclaration","scope":1464,"src":"17475:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1461,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:9"},"src":"17426:74:9"},{"documentation":{"id":1465,"nodeType":"StructuredDocumentation","src":"17727:87:9","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":1467,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:9","nodeType":"ErrorDefinition","parameters":{"id":1466,"nodeType":"ParameterList","parameters":[],"src":"17858:2:9"},"src":"17819:42:9"},{"documentation":{"id":1468,"nodeType":"StructuredDocumentation","src":"17867:48:9","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":1470,"name":"CannotReceiveEth","nameLocation":"17926:16:9","nodeType":"ErrorDefinition","parameters":{"id":1469,"nodeType":"ParameterList","parameters":[],"src":"17942:2:9"},"src":"17920:25:9"},{"documentation":{"id":1471,"nodeType":"StructuredDocumentation","src":"17951:156:9","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":1473,"name":"NotVaultDelegateCall","nameLocation":"18118:20:9","nodeType":"ErrorDefinition","parameters":{"id":1472,"nodeType":"ParameterList","parameters":[],"src":"18138:2:9"},"src":"18112:29:9"},{"documentation":{"id":1474,"nodeType":"StructuredDocumentation","src":"18147:89:9","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":1476,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:9","nodeType":"ErrorDefinition","parameters":{"id":1475,"nodeType":"ParameterList","parameters":[],"src":"18276:2:9"},"src":"18241:38:9"},{"documentation":{"id":1477,"nodeType":"StructuredDocumentation","src":"18285:96:9","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1479,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:9","nodeType":"ErrorDefinition","parameters":{"id":1478,"nodeType":"ParameterList","parameters":[],"src":"18428:2:9"},"src":"18386:45:9"},{"documentation":{"id":1480,"nodeType":"StructuredDocumentation","src":"18437:85:9","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":1482,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:9","nodeType":"ErrorDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[],"src":"18558:2:9"},"src":"18527:34:9"},{"documentation":{"id":1483,"nodeType":"StructuredDocumentation","src":"18567:54:9","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":1485,"name":"QuoteResultSpoofed","nameLocation":"18632:18:9","nodeType":"ErrorDefinition","parameters":{"id":1484,"nodeType":"ParameterList","parameters":[],"src":"18650:2:9"},"src":"18626:27:9"}],"scope":1487,"src":"316:18339:9","usedErrors":[1131,1136,1141,1146,1155,1161,1164,1167,1170,1173,1176,1179,1188,1191,1194,1197,1200,1203,1206,1209,1212,1215,1218,1221,1224,1227,1230,1236,1243,1250,1253,1256,1266,1276,1283,1286,1289,1292,1302,1312,1319,1322,1325,1328,1331,1334,1337,1340,1343,1348,1353,1358,1361,1364,1367,1370,1373,1378,1383,1388,1394,1400,1403,1411,1417,1423,1426,1429,1432,1437,1447,1457,1464,1467,1470,1473,1476,1479,1482,1485],"usedEvents":[]}],"src":"46:18610:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[2525],"AddLiquidityParams":[2541],"AfterSwapParams":[2519],"BufferWrapOrUnwrapParams":[2580],"FEE_BITLENGTH":[2583],"FEE_SCALING_FACTOR":[2586],"HookFlags":[2345],"HooksConfig":[2369],"IAuthorizer":[251],"IERC20":[7165],"IERC4626":[7087],"IHooks":[453],"IProtocolFeeController":[791],"IRateProvider":[57],"IVaultEvents":[1725],"LiquidityManagement":[2298],"MAX_FEE_PERCENTAGE":[2589],"PoolConfig":[2323],"PoolConfigBits":[2300],"PoolData":[2447],"PoolRoleAccounts":[2395],"PoolSwapParams":[2490],"RemoveLiquidityKind":[2546],"RemoveLiquidityParams":[2562],"Rounding":[2450],"SwapKind":[2453],"SwapState":[2379],"TokenConfig":[2412],"TokenInfo":[2422],"TokenType":[2399],"VaultState":[2387],"VaultSwapParams":[2472],"WrappingDirection":[2565]},"id":1726,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1488,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1490,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1726,"sourceUnit":7088,"src":"72:75:10","symbolAliases":[{"foreign":{"id":1489,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7087,"src":"81:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1492,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1726,"sourceUnit":7166,"src":"148:72:10","symbolAliases":[{"foreign":{"id":1491,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"157:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1494,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1726,"sourceUnit":792,"src":"222:70:10","symbolAliases":[{"foreign":{"id":1493,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":791,"src":"231:22:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1496,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1726,"sourceUnit":252,"src":"293:48:10","symbolAliases":[{"foreign":{"id":1495,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"302:11:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1498,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1726,"sourceUnit":454,"src":"342:38:10","symbolAliases":[{"foreign":{"id":1497,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":453,"src":"351:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1499,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1726,"sourceUnit":2590,"src":"381:26:10","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":1500,"nodeType":"StructuredDocumentation","src":"409:91:10","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1725,"linearizedBaseContracts":[1725],"name":"IVaultEvents","nameLocation":"510:12:10","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1501,"nodeType":"StructuredDocumentation","src":"529:657:10","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":1524,"name":"PoolRegistered","nameLocation":"1197:14:10","nodeType":"EventDefinition","parameters":{"id":1523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1503,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:10","nodeType":"VariableDeclaration","scope":1524,"src":"1221:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1502,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1505,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:10","nodeType":"VariableDeclaration","scope":1524,"src":"1251:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1504,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1509,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:10","nodeType":"VariableDeclaration","scope":1524,"src":"1284:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2412_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1507,"nodeType":"UserDefinedTypeName","pathNode":{"id":1506,"name":"TokenConfig","nameLocations":["1284:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2412,"src":"1284:11:10"},"referencedDeclaration":2412,"src":"1284:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2412_storage_ptr","typeString":"struct TokenConfig"}},"id":1508,"nodeType":"ArrayTypeName","src":"1284:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2412_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1511,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:10","nodeType":"VariableDeclaration","scope":1524,"src":"1319:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1510,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1513,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:10","nodeType":"VariableDeclaration","scope":1524,"src":"1354:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1512,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1516,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:10","nodeType":"VariableDeclaration","scope":1524,"src":"1389:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1515,"nodeType":"UserDefinedTypeName","pathNode":{"id":1514,"name":"PoolRoleAccounts","nameLocations":["1389:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2395,"src":"1389:16:10"},"referencedDeclaration":2395,"src":"1389:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1519,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:10","nodeType":"VariableDeclaration","scope":1524,"src":"1428:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2369_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1518,"nodeType":"UserDefinedTypeName","pathNode":{"id":1517,"name":"HooksConfig","nameLocations":["1428:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2369,"src":"1428:11:10"},"referencedDeclaration":2369,"src":"1428:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2369_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":1522,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:10","nodeType":"VariableDeclaration","scope":1524,"src":"1461:39:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2298_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1521,"nodeType":"UserDefinedTypeName","pathNode":{"id":1520,"name":"LiquidityManagement","nameLocations":["1461:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":2298,"src":"1461:19:10"},"referencedDeclaration":2298,"src":"1461:19:10","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2298_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:10"},"src":"1191:316:10"},{"anonymous":false,"documentation":{"id":1525,"nodeType":"StructuredDocumentation","src":"1513:120:10","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":1529,"name":"PoolInitialized","nameLocation":"1644:15:10","nodeType":"EventDefinition","parameters":{"id":1528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1527,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:10","nodeType":"VariableDeclaration","scope":1529,"src":"1660:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1526,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:10"},"src":"1638:44:10"},{"anonymous":false,"documentation":{"id":1530,"nodeType":"StructuredDocumentation","src":"1688:478:10","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":1548,"name":"Swap","nameLocation":"2177:4:10","nodeType":"EventDefinition","parameters":{"id":1547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1532,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:10","nodeType":"VariableDeclaration","scope":1548,"src":"2191:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1531,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1535,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:10","nodeType":"VariableDeclaration","scope":1548,"src":"2221:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1534,"nodeType":"UserDefinedTypeName","pathNode":{"id":1533,"name":"IERC20","nameLocations":["2221:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2221:6:10"},"referencedDeclaration":7165,"src":"2221:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1538,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:10","nodeType":"VariableDeclaration","scope":1548,"src":"2253:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1537,"nodeType":"UserDefinedTypeName","pathNode":{"id":1536,"name":"IERC20","nameLocations":["2253:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2253:6:10"},"referencedDeclaration":7165,"src":"2253:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1540,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:10","nodeType":"VariableDeclaration","scope":1548,"src":"2286:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1539,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1542,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:10","nodeType":"VariableDeclaration","scope":1548,"src":"2312:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1541,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1544,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:10","nodeType":"VariableDeclaration","scope":1548,"src":"2339:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1543,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1546,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:10","nodeType":"VariableDeclaration","scope":1548,"src":"2374:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1545,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:10"},"src":"2171:231:10"},{"anonymous":false,"documentation":{"id":1549,"nodeType":"StructuredDocumentation","src":"2408:352:10","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":1560,"name":"Wrap","nameLocation":"2771:4:10","nodeType":"EventDefinition","parameters":{"id":1559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1552,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:10","nodeType":"VariableDeclaration","scope":1560,"src":"2785:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1551,"nodeType":"UserDefinedTypeName","pathNode":{"id":1550,"name":"IERC4626","nameLocations":["2785:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"2785:8:10"},"referencedDeclaration":7087,"src":"2785:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1554,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:10","nodeType":"VariableDeclaration","scope":1560,"src":"2824:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1553,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1556,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:10","nodeType":"VariableDeclaration","scope":1560,"src":"2861:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1555,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1558,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:10","nodeType":"VariableDeclaration","scope":1560,"src":"2891:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1557,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:10"},"src":"2765:155:10"},{"anonymous":false,"documentation":{"id":1561,"nodeType":"StructuredDocumentation","src":"2926:355:10","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":1572,"name":"Unwrap","nameLocation":"3292:6:10","nodeType":"EventDefinition","parameters":{"id":1571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1564,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:10","nodeType":"VariableDeclaration","scope":1572,"src":"3308:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1563,"nodeType":"UserDefinedTypeName","pathNode":{"id":1562,"name":"IERC4626","nameLocations":["3308:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"3308:8:10"},"referencedDeclaration":7087,"src":"3308:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1566,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:10","nodeType":"VariableDeclaration","scope":1572,"src":"3347:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1565,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1568,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:10","nodeType":"VariableDeclaration","scope":1572,"src":"3377:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1567,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1570,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:10","nodeType":"VariableDeclaration","scope":1572,"src":"3414:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1569,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:10"},"src":"3286:157:10"},{"anonymous":false,"documentation":{"id":1573,"nodeType":"StructuredDocumentation","src":"3449:562:10","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":1590,"name":"LiquidityAdded","nameLocation":"4022:14:10","nodeType":"EventDefinition","parameters":{"id":1589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1575,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:10","nodeType":"VariableDeclaration","scope":1590,"src":"4046:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1574,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1577,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:10","nodeType":"VariableDeclaration","scope":1590,"src":"4076:33:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1576,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1580,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:10","nodeType":"VariableDeclaration","scope":1590,"src":"4119:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2525","typeString":"enum AddLiquidityKind"},"typeName":{"id":1579,"nodeType":"UserDefinedTypeName","pathNode":{"id":1578,"name":"AddLiquidityKind","nameLocations":["4119:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2525,"src":"4119:16:10"},"referencedDeclaration":2525,"src":"4119:16:10","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2525","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1582,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:10","nodeType":"VariableDeclaration","scope":1590,"src":"4158:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1581,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1585,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:10","nodeType":"VariableDeclaration","scope":1590,"src":"4187:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1583,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1584,"nodeType":"ArrayTypeName","src":"4187:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1588,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:10","nodeType":"VariableDeclaration","scope":1590,"src":"4222:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1586,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1587,"nodeType":"ArrayTypeName","src":"4222:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:10"},"src":"4016:240:10"},{"anonymous":false,"documentation":{"id":1591,"nodeType":"StructuredDocumentation","src":"4262:548:10","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":1608,"name":"LiquidityRemoved","nameLocation":"4821:16:10","nodeType":"EventDefinition","parameters":{"id":1607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1593,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:10","nodeType":"VariableDeclaration","scope":1608,"src":"4847:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1592,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1595,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:10","nodeType":"VariableDeclaration","scope":1608,"src":"4877:33:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1594,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1598,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:10","nodeType":"VariableDeclaration","scope":1608,"src":"4920:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2546","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1597,"nodeType":"UserDefinedTypeName","pathNode":{"id":1596,"name":"RemoveLiquidityKind","nameLocations":["4920:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"4920:19:10"},"referencedDeclaration":2546,"src":"4920:19:10","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2546","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1600,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:10","nodeType":"VariableDeclaration","scope":1608,"src":"4962:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1599,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1603,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:10","nodeType":"VariableDeclaration","scope":1608,"src":"4991:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1601,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1602,"nodeType":"ArrayTypeName","src":"4991:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1606,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:10","nodeType":"VariableDeclaration","scope":1608,"src":"5028:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1604,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1605,"nodeType":"ArrayTypeName","src":"5028:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:10"},"src":"4815:247:10"},{"anonymous":false,"documentation":{"id":1609,"nodeType":"StructuredDocumentation","src":"5068:114:10","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":1613,"name":"VaultPausedStateChanged","nameLocation":"5193:23:10","nodeType":"EventDefinition","parameters":{"id":1612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1611,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:10","nodeType":"VariableDeclaration","scope":1613,"src":"5217:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1610,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:10"},"src":"5187:43:10"},{"anonymous":false,"documentation":{"id":1614,"nodeType":"StructuredDocumentation","src":"5236:87:10","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":1616,"name":"VaultQueriesDisabled","nameLocation":"5334:20:10","nodeType":"EventDefinition","parameters":{"id":1615,"nodeType":"ParameterList","parameters":[],"src":"5354:2:10"},"src":"5328:29:10"},{"anonymous":false,"documentation":{"id":1617,"nodeType":"StructuredDocumentation","src":"5363:85:10","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":1619,"name":"VaultQueriesEnabled","nameLocation":"5459:19:10","nodeType":"EventDefinition","parameters":{"id":1618,"nodeType":"ParameterList","parameters":[],"src":"5478:2:10"},"src":"5453:28:10"},{"anonymous":false,"documentation":{"id":1620,"nodeType":"StructuredDocumentation","src":"5487:171:10","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":1626,"name":"PoolPausedStateChanged","nameLocation":"5669:22:10","nodeType":"EventDefinition","parameters":{"id":1625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1622,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:10","nodeType":"VariableDeclaration","scope":1626,"src":"5692:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1621,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1624,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:10","nodeType":"VariableDeclaration","scope":1626,"src":"5714:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1623,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:10"},"src":"5663:64:10"},{"anonymous":false,"documentation":{"id":1627,"nodeType":"StructuredDocumentation","src":"5733:158:10","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":1633,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:10","nodeType":"EventDefinition","parameters":{"id":1632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1629,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:10","nodeType":"VariableDeclaration","scope":1633,"src":"5927:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1628,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1631,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:10","nodeType":"VariableDeclaration","scope":1633,"src":"5949:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1630,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:10"},"src":"5896:80:10"},{"anonymous":false,"documentation":{"id":1634,"nodeType":"StructuredDocumentation","src":"5982:170:10","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":1640,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:10","nodeType":"EventDefinition","parameters":{"id":1639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1636,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:10","nodeType":"VariableDeclaration","scope":1640,"src":"6192:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1635,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1638,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:10","nodeType":"VariableDeclaration","scope":1640,"src":"6214:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1637,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:10"},"src":"6157:76:10"},{"anonymous":false,"documentation":{"id":1641,"nodeType":"StructuredDocumentation","src":"6239:353:10","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":1647,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:10","nodeType":"EventDefinition","parameters":{"id":1646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1643,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:10","nodeType":"VariableDeclaration","scope":1647,"src":"6637:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1642,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1645,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:10","nodeType":"VariableDeclaration","scope":1647,"src":"6659:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1644,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:10"},"src":"6597:98:10"},{"anonymous":false,"documentation":{"id":1648,"nodeType":"StructuredDocumentation","src":"6701:357:10","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":1654,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:10","nodeType":"EventDefinition","parameters":{"id":1653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1650,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:10","nodeType":"VariableDeclaration","scope":1654,"src":"7104:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1649,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1652,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:10","nodeType":"VariableDeclaration","scope":1654,"src":"7126:35:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1651,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:10"},"src":"7063:100:10"},{"anonymous":false,"documentation":{"id":1655,"nodeType":"StructuredDocumentation","src":"7169:132:10","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":1660,"name":"AuthorizerChanged","nameLocation":"7312:17:10","nodeType":"EventDefinition","parameters":{"id":1659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1658,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:10","nodeType":"VariableDeclaration","scope":1660,"src":"7330:33:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"},"typeName":{"id":1657,"nodeType":"UserDefinedTypeName","pathNode":{"id":1656,"name":"IAuthorizer","nameLocations":["7330:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":251,"src":"7330:11:10"},"referencedDeclaration":251,"src":"7330:11:10","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:10"},"src":"7306:59:10"},{"anonymous":false,"documentation":{"id":1661,"nodeType":"StructuredDocumentation","src":"7371:180:10","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":1666,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:10","nodeType":"EventDefinition","parameters":{"id":1665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1664,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:10","nodeType":"VariableDeclaration","scope":1666,"src":"7591:55:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"},"typeName":{"id":1663,"nodeType":"UserDefinedTypeName","pathNode":{"id":1662,"name":"IProtocolFeeController","nameLocations":["7591:22:10"],"nodeType":"IdentifierPath","referencedDeclaration":791,"src":"7591:22:10"},"referencedDeclaration":791,"src":"7591:22:10","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:10"},"src":"7556:92:10"},{"anonymous":false,"documentation":{"id":1667,"nodeType":"StructuredDocumentation","src":"7654:553:10","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":1678,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:10","nodeType":"EventDefinition","parameters":{"id":1677,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1670,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:10","nodeType":"VariableDeclaration","scope":1678,"src":"8250:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1669,"nodeType":"UserDefinedTypeName","pathNode":{"id":1668,"name":"IERC4626","nameLocations":["8250:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"8250:8:10"},"referencedDeclaration":7087,"src":"8250:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1672,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:10","nodeType":"VariableDeclaration","scope":1678,"src":"8289:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1671,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1674,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:10","nodeType":"VariableDeclaration","scope":1678,"src":"8323:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1673,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1676,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:10","nodeType":"VariableDeclaration","scope":1678,"src":"8354:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1675,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:10"},"src":"8212:171:10"},{"anonymous":false,"documentation":{"id":1679,"nodeType":"StructuredDocumentation","src":"8389:570:10","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":1688,"name":"BufferSharesMinted","nameLocation":"8970:18:10","nodeType":"EventDefinition","parameters":{"id":1687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1682,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:10","nodeType":"VariableDeclaration","scope":1688,"src":"8989:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1681,"nodeType":"UserDefinedTypeName","pathNode":{"id":1680,"name":"IERC4626","nameLocations":["8989:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"8989:8:10"},"referencedDeclaration":7087,"src":"8989:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1684,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:10","nodeType":"VariableDeclaration","scope":1688,"src":"9020:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1683,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1686,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:10","nodeType":"VariableDeclaration","scope":1688,"src":"9040:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1685,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:10"},"src":"8964:98:10"},{"anonymous":false,"documentation":{"id":1689,"nodeType":"StructuredDocumentation","src":"9068:571:10","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":1698,"name":"BufferSharesBurned","nameLocation":"9650:18:10","nodeType":"EventDefinition","parameters":{"id":1697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1692,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:10","nodeType":"VariableDeclaration","scope":1698,"src":"9669:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1691,"nodeType":"UserDefinedTypeName","pathNode":{"id":1690,"name":"IERC4626","nameLocations":["9669:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"9669:8:10"},"referencedDeclaration":7087,"src":"9669:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1694,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:10","nodeType":"VariableDeclaration","scope":1698,"src":"9700:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1693,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1696,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:10","nodeType":"VariableDeclaration","scope":1698,"src":"9722:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1695,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:10"},"src":"9644:100:10"},{"anonymous":false,"documentation":{"id":1699,"nodeType":"StructuredDocumentation","src":"9750:509:10","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":1710,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:10","nodeType":"EventDefinition","parameters":{"id":1709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1702,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:10","nodeType":"VariableDeclaration","scope":1710,"src":"10306:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":1701,"nodeType":"UserDefinedTypeName","pathNode":{"id":1700,"name":"IERC4626","nameLocations":["10306:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"10306:8:10"},"referencedDeclaration":7087,"src":"10306:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1704,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:10","nodeType":"VariableDeclaration","scope":1710,"src":"10345:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1706,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:10","nodeType":"VariableDeclaration","scope":1710,"src":"10379:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1705,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1708,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:10","nodeType":"VariableDeclaration","scope":1710,"src":"10410:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1707,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:10"},"src":"10264:175:10"},{"anonymous":false,"documentation":{"id":1711,"nodeType":"StructuredDocumentation","src":"10445:278:10","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":1715,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:10","nodeType":"EventDefinition","parameters":{"id":1714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1713,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:10","nodeType":"VariableDeclaration","scope":1715,"src":"10765:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1712,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:10"},"src":"10728:50:10"},{"anonymous":false,"documentation":{"id":1716,"nodeType":"StructuredDocumentation","src":"10784:194:10","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":1724,"name":"VaultAuxiliary","nameLocation":"10989:14:10","nodeType":"EventDefinition","parameters":{"id":1723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1718,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:10","nodeType":"VariableDeclaration","scope":1724,"src":"11004:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1717,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1720,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:10","nodeType":"VariableDeclaration","scope":1724,"src":"11026:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1719,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1722,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:10","nodeType":"VariableDeclaration","scope":1724,"src":"11052:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1721,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:10"},"src":"10983:86:10"}],"scope":1726,"src":"500:10571:10","usedErrors":[],"usedEvents":[1524,1529,1548,1560,1572,1590,1608,1613,1616,1619,1626,1633,1640,1647,1654,1660,1666,1678,1688,1698,1710,1715,1724]}],"src":"46:11026:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[2525],"AddLiquidityParams":[2541],"AfterSwapParams":[2519],"BufferWrapOrUnwrapParams":[2580],"FEE_BITLENGTH":[2583],"FEE_SCALING_FACTOR":[2586],"HookFlags":[2345],"HooksConfig":[2369],"IAuthorizer":[251],"IERC20":[7165],"IERC4626":[7087],"IHooks":[453],"IProtocolFeeController":[791],"IRateProvider":[57],"IVault":[829],"IVaultExtension":[2144],"LiquidityManagement":[2298],"MAX_FEE_PERCENTAGE":[2589],"PoolConfig":[2323],"PoolConfigBits":[2300],"PoolData":[2447],"PoolRoleAccounts":[2395],"PoolSwapParams":[2490],"RemoveLiquidityKind":[2546],"RemoveLiquidityParams":[2562],"Rounding":[2450],"SwapKind":[2453],"SwapState":[2379],"TokenConfig":[2412],"TokenInfo":[2422],"TokenType":[2399],"VaultState":[2387],"VaultSwapParams":[2472],"WrappingDirection":[2565]},"id":2145,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1727,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1729,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2145,"sourceUnit":7088,"src":"72:75:11","symbolAliases":[{"foreign":{"id":1728,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7087,"src":"81:8:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1731,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2145,"sourceUnit":7166,"src":"148:72:11","symbolAliases":[{"foreign":{"id":1730,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"157:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1733,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2145,"sourceUnit":252,"src":"222:48:11","symbolAliases":[{"foreign":{"id":1732,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"231:11:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1735,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2145,"sourceUnit":792,"src":"271:70:11","symbolAliases":[{"foreign":{"id":1734,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":791,"src":"280:22:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1737,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2145,"sourceUnit":830,"src":"342:38:11","symbolAliases":[{"foreign":{"id":1736,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"351:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1739,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2145,"sourceUnit":454,"src":"381:38:11","symbolAliases":[{"foreign":{"id":1738,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":453,"src":"390:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1740,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2145,"sourceUnit":2590,"src":"420:26:11","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":1741,"nodeType":"StructuredDocumentation","src":"448:318:11","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":2144,"linearizedBaseContracts":[2144],"name":"IVaultExtension","nameLocation":"777:15:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1742,"nodeType":"StructuredDocumentation","src":"1025:206:11","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":1748,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:11","nodeType":"FunctionDefinition","parameters":{"id":1743,"nodeType":"ParameterList","parameters":[],"src":"1250:2:11"},"returnParameters":{"id":1747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1746,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1748,"src":"1276:6:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":1745,"nodeType":"UserDefinedTypeName","pathNode":{"id":1744,"name":"IVault","nameLocations":["1276:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"1276:6:11"},"referencedDeclaration":829,"src":"1276:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:11"},"scope":2144,"src":"1236:48:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1749,"nodeType":"StructuredDocumentation","src":"1290:202:11","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":1754,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:11","nodeType":"FunctionDefinition","parameters":{"id":1750,"nodeType":"ParameterList","parameters":[],"src":"1519:2:11"},"returnParameters":{"id":1753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1752,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:11","nodeType":"VariableDeclaration","scope":1754,"src":"1545:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1751,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:11"},"scope":2144,"src":"1497:68:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1755,"nodeType":"StructuredDocumentation","src":"1793:254:11","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":1760,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:11","nodeType":"FunctionDefinition","parameters":{"id":1756,"nodeType":"ParameterList","parameters":[],"src":"2071:2:11"},"returnParameters":{"id":1759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1758,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:11","nodeType":"VariableDeclaration","scope":1760,"src":"2097:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1757,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:11"},"scope":2144,"src":"2052:60:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1761,"nodeType":"StructuredDocumentation","src":"2118:141:11","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":1766,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:11","nodeType":"FunctionDefinition","parameters":{"id":1762,"nodeType":"ParameterList","parameters":[],"src":"2293:2:11"},"returnParameters":{"id":1765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1764,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:11","nodeType":"VariableDeclaration","scope":1766,"src":"2319:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1763,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:11"},"scope":2144,"src":"2264:82:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1767,"nodeType":"StructuredDocumentation","src":"2352:284:11","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":1775,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:11","nodeType":"FunctionDefinition","parameters":{"id":1771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1770,"mutability":"mutable","name":"token","nameLocation":"2671:5:11","nodeType":"VariableDeclaration","scope":1775,"src":"2664:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1769,"nodeType":"UserDefinedTypeName","pathNode":{"id":1768,"name":"IERC20","nameLocations":["2664:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2664:6:11"},"referencedDeclaration":7165,"src":"2664:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:11"},"returnParameters":{"id":1774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1773,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:11","nodeType":"VariableDeclaration","scope":1775,"src":"2701:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1772,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:11","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:11"},"scope":2144,"src":"2641:79:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1776,"nodeType":"StructuredDocumentation","src":"2726:230:11","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":1784,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:11","nodeType":"FunctionDefinition","parameters":{"id":1780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1779,"mutability":"mutable","name":"token","nameLocation":"2991:5:11","nodeType":"VariableDeclaration","scope":1784,"src":"2984:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":1778,"nodeType":"UserDefinedTypeName","pathNode":{"id":1777,"name":"IERC20","nameLocations":["2984:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2984:6:11"},"referencedDeclaration":7165,"src":"2984:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:11"},"returnParameters":{"id":1783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:11","nodeType":"VariableDeclaration","scope":1784,"src":"3021:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1781,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:11"},"scope":2144,"src":"2961:83:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1785,"nodeType":"StructuredDocumentation","src":"3050:944:11","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":1792,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:11","nodeType":"FunctionDefinition","parameters":{"id":1788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1787,"mutability":"mutable","name":"pool","nameLocation":"4042:4:11","nodeType":"VariableDeclaration","scope":1792,"src":"4034:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1786,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:11"},"returnParameters":{"id":1791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1790,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:11","nodeType":"VariableDeclaration","scope":1792,"src":"4071:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1789,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:11"},"scope":2144,"src":"3999:93:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1793,"nodeType":"StructuredDocumentation","src":"4323:1604:11","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":1816,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:11","nodeType":"FunctionDefinition","parameters":{"id":1814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1795,"mutability":"mutable","name":"pool","nameLocation":"5971:4:11","nodeType":"VariableDeclaration","scope":1816,"src":"5963:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1794,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1799,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:11","nodeType":"VariableDeclaration","scope":1816,"src":"5985:32:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2412_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1797,"nodeType":"UserDefinedTypeName","pathNode":{"id":1796,"name":"TokenConfig","nameLocations":["5985:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":2412,"src":"5985:11:11"},"referencedDeclaration":2412,"src":"5985:11:11","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2412_storage_ptr","typeString":"struct TokenConfig"}},"id":1798,"nodeType":"ArrayTypeName","src":"5985:13:11","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2412_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1801,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:11","nodeType":"VariableDeclaration","scope":1816,"src":"6027:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1800,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1803,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:11","nodeType":"VariableDeclaration","scope":1816,"src":"6062:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1802,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1805,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:11","nodeType":"VariableDeclaration","scope":1816,"src":"6097:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1804,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1808,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:11","nodeType":"VariableDeclaration","scope":1816,"src":"6129:38:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1807,"nodeType":"UserDefinedTypeName","pathNode":{"id":1806,"name":"PoolRoleAccounts","nameLocations":["6129:16:11"],"nodeType":"IdentifierPath","referencedDeclaration":2395,"src":"6129:16:11"},"referencedDeclaration":2395,"src":"6129:16:11","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1810,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:11","nodeType":"VariableDeclaration","scope":1816,"src":"6177:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1809,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1813,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:11","nodeType":"VariableDeclaration","scope":1816,"src":"6212:48:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2298_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1812,"nodeType":"UserDefinedTypeName","pathNode":{"id":1811,"name":"LiquidityManagement","nameLocations":["6212:19:11"],"nodeType":"IdentifierPath","referencedDeclaration":2298,"src":"6212:19:11"},"referencedDeclaration":2298,"src":"6212:19:11","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2298_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:11"},"returnParameters":{"id":1815,"nodeType":"ParameterList","parameters":[],"src":"6275:0:11"},"scope":2144,"src":"5932:344:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1817,"nodeType":"StructuredDocumentation","src":"6282:185:11","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":1824,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:11","nodeType":"FunctionDefinition","parameters":{"id":1820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1819,"mutability":"mutable","name":"pool","nameLocation":"6506:4:11","nodeType":"VariableDeclaration","scope":1824,"src":"6498:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1818,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:11"},"returnParameters":{"id":1823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1822,"mutability":"mutable","name":"registered","nameLocation":"6540:10:11","nodeType":"VariableDeclaration","scope":1824,"src":"6535:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1821,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:11"},"scope":2144,"src":"6472:80:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1825,"nodeType":"StructuredDocumentation","src":"6558:589:11","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":1845,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:11","nodeType":"FunctionDefinition","parameters":{"id":1841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1827,"mutability":"mutable","name":"pool","nameLocation":"7189:4:11","nodeType":"VariableDeclaration","scope":1845,"src":"7181:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1826,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1829,"mutability":"mutable","name":"to","nameLocation":"7211:2:11","nodeType":"VariableDeclaration","scope":1845,"src":"7203:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1828,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1833,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:11","nodeType":"VariableDeclaration","scope":1845,"src":"7223:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1831,"nodeType":"UserDefinedTypeName","pathNode":{"id":1830,"name":"IERC20","nameLocations":["7223:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"7223:6:11"},"referencedDeclaration":7165,"src":"7223:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":1832,"nodeType":"ArrayTypeName","src":"7223:8:11","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1836,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:11","nodeType":"VariableDeclaration","scope":1845,"src":"7255:31:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1834,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1835,"nodeType":"ArrayTypeName","src":"7255:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1838,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:11","nodeType":"VariableDeclaration","scope":1845,"src":"7296:23:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1837,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1840,"mutability":"mutable","name":"userData","nameLocation":"7342:8:11","nodeType":"VariableDeclaration","scope":1845,"src":"7329:21:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1839,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:11"},"returnParameters":{"id":1844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1843,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:11","nodeType":"VariableDeclaration","scope":1845,"src":"7375:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1842,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:11"},"scope":2144,"src":"7152:245:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1846,"nodeType":"StructuredDocumentation","src":"7627:258:11","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":1853,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:11","nodeType":"FunctionDefinition","parameters":{"id":1849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1848,"mutability":"mutable","name":"pool","nameLocation":"7925:4:11","nodeType":"VariableDeclaration","scope":1853,"src":"7917:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1847,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:11"},"returnParameters":{"id":1852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1851,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:11","nodeType":"VariableDeclaration","scope":1853,"src":"7954:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1850,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:11"},"scope":2144,"src":"7890:82:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1854,"nodeType":"StructuredDocumentation","src":"7978:152:11","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":1863,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:11","nodeType":"FunctionDefinition","parameters":{"id":1857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1856,"mutability":"mutable","name":"pool","nameLocation":"8166:4:11","nodeType":"VariableDeclaration","scope":1863,"src":"8158:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1855,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:11"},"returnParameters":{"id":1862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1861,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:11","nodeType":"VariableDeclaration","scope":1863,"src":"8195:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1859,"nodeType":"UserDefinedTypeName","pathNode":{"id":1858,"name":"IERC20","nameLocations":["8195:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"8195:6:11"},"referencedDeclaration":7165,"src":"8195:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":1860,"nodeType":"ArrayTypeName","src":"8195:8:11","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:11"},"scope":2144,"src":"8135:84:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1864,"nodeType":"StructuredDocumentation","src":"8225:512:11","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":1875,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:11","nodeType":"FunctionDefinition","parameters":{"id":1867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1866,"mutability":"mutable","name":"pool","nameLocation":"8786:4:11","nodeType":"VariableDeclaration","scope":1875,"src":"8778:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1865,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:11"},"returnParameters":{"id":1874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1870,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:11","nodeType":"VariableDeclaration","scope":1875,"src":"8820:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1868,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1869,"nodeType":"ArrayTypeName","src":"8820:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1873,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:11","nodeType":"VariableDeclaration","scope":1875,"src":"8860:27:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1871,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1872,"nodeType":"ArrayTypeName","src":"8860:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:11"},"scope":2144,"src":"8742:147:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1876,"nodeType":"StructuredDocumentation","src":"8895:287:11","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":1884,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:11","nodeType":"FunctionDefinition","parameters":{"id":1879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1878,"mutability":"mutable","name":"pool","nameLocation":"9216:4:11","nodeType":"VariableDeclaration","scope":1884,"src":"9208:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1877,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:11"},"returnParameters":{"id":1883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1882,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:11","nodeType":"VariableDeclaration","scope":1884,"src":"9245:24:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2447_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1881,"nodeType":"UserDefinedTypeName","pathNode":{"id":1880,"name":"PoolData","nameLocations":["9245:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":2447,"src":"9245:8:11"},"referencedDeclaration":2447,"src":"9245:8:11","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2447_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:11"},"scope":2144,"src":"9187:84:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1885,"nodeType":"StructuredDocumentation","src":"9277:531:11","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":1904,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:11","nodeType":"FunctionDefinition","parameters":{"id":1888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1887,"mutability":"mutable","name":"pool","nameLocation":"9856:4:11","nodeType":"VariableDeclaration","scope":1904,"src":"9848:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1886,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:11"},"returnParameters":{"id":1903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1892,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:11","nodeType":"VariableDeclaration","scope":1904,"src":"9927:22:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1890,"nodeType":"UserDefinedTypeName","pathNode":{"id":1889,"name":"IERC20","nameLocations":["9927:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"9927:6:11"},"referencedDeclaration":7165,"src":"9927:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":1891,"nodeType":"ArrayTypeName","src":"9927:8:11","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1896,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:11","nodeType":"VariableDeclaration","scope":1904,"src":"9963:28:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2422_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":1894,"nodeType":"UserDefinedTypeName","pathNode":{"id":1893,"name":"TokenInfo","nameLocations":["9963:9:11"],"nodeType":"IdentifierPath","referencedDeclaration":2422,"src":"9963:9:11"},"referencedDeclaration":2422,"src":"9963:9:11","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2422_storage_ptr","typeString":"struct TokenInfo"}},"id":1895,"nodeType":"ArrayTypeName","src":"9963:11:11","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2422_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":1899,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:11","nodeType":"VariableDeclaration","scope":1904,"src":"10005:28:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1897,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1898,"nodeType":"ArrayTypeName","src":"10005:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1902,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:11","nodeType":"VariableDeclaration","scope":1904,"src":"10047:41:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1900,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1901,"nodeType":"ArrayTypeName","src":"10047:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:11"},"scope":2144,"src":"9813:286:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1905,"nodeType":"StructuredDocumentation","src":"10105:312:11","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":1913,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:11","nodeType":"FunctionDefinition","parameters":{"id":1908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1907,"mutability":"mutable","name":"pool","nameLocation":"10462:4:11","nodeType":"VariableDeclaration","scope":1913,"src":"10454:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1906,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:11"},"returnParameters":{"id":1912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1911,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:11","nodeType":"VariableDeclaration","scope":1913,"src":"10491:37:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1909,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1910,"nodeType":"ArrayTypeName","src":"10491:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:11"},"scope":2144,"src":"10422:108:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1914,"nodeType":"StructuredDocumentation","src":"10536:301:11","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":1922,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:11","nodeType":"FunctionDefinition","parameters":{"id":1917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1916,"mutability":"mutable","name":"pool","nameLocation":"10873:4:11","nodeType":"VariableDeclaration","scope":1922,"src":"10865:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1915,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:11"},"returnParameters":{"id":1921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1920,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:11","nodeType":"VariableDeclaration","scope":1922,"src":"10902:28:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2323_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":1919,"nodeType":"UserDefinedTypeName","pathNode":{"id":1918,"name":"PoolConfig","nameLocations":["10902:10:11"],"nodeType":"IdentifierPath","referencedDeclaration":2323,"src":"10902:10:11"},"referencedDeclaration":2323,"src":"10902:10:11","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2323_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:11"},"scope":2144,"src":"10842:90:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1923,"nodeType":"StructuredDocumentation","src":"10938:283:11","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":1931,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:11","nodeType":"FunctionDefinition","parameters":{"id":1926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1925,"mutability":"mutable","name":"pool","nameLocation":"11258:4:11","nodeType":"VariableDeclaration","scope":1931,"src":"11250:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1924,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:11"},"returnParameters":{"id":1930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1929,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:11","nodeType":"VariableDeclaration","scope":1931,"src":"11287:30:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2369_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1928,"nodeType":"UserDefinedTypeName","pathNode":{"id":1927,"name":"HooksConfig","nameLocations":["11287:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":2369,"src":"11287:11:11"},"referencedDeclaration":2369,"src":"11287:11:11","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2369_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:11"},"scope":2144,"src":"11226:93:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1932,"nodeType":"StructuredDocumentation","src":"11325:160:11","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":1939,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:11","nodeType":"FunctionDefinition","parameters":{"id":1935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1934,"mutability":"mutable","name":"pool","nameLocation":"11518:4:11","nodeType":"VariableDeclaration","scope":1939,"src":"11510:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1933,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:11"},"returnParameters":{"id":1938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1937,"mutability":"mutable","name":"rate","nameLocation":"11555:4:11","nodeType":"VariableDeclaration","scope":1939,"src":"11547:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1936,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:11"},"scope":2144,"src":"11490:71:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1940,"nodeType":"StructuredDocumentation","src":"11792:168:11","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":1947,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:11","nodeType":"FunctionDefinition","parameters":{"id":1943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1942,"mutability":"mutable","name":"token","nameLocation":"11994:5:11","nodeType":"VariableDeclaration","scope":1947,"src":"11986:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1941,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:11"},"returnParameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1945,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:11","nodeType":"VariableDeclaration","scope":1947,"src":"12024:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1944,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:11"},"scope":2144,"src":"11965:85:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1948,"nodeType":"StructuredDocumentation","src":"12056:225:11","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":1957,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:11","nodeType":"FunctionDefinition","parameters":{"id":1953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1950,"mutability":"mutable","name":"token","nameLocation":"12313:5:11","nodeType":"VariableDeclaration","scope":1957,"src":"12305:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1949,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1952,"mutability":"mutable","name":"account","nameLocation":"12328:7:11","nodeType":"VariableDeclaration","scope":1957,"src":"12320:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1951,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:11"},"returnParameters":{"id":1956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1955,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:11","nodeType":"VariableDeclaration","scope":1957,"src":"12360:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1954,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:11"},"scope":2144,"src":"12286:96:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1958,"nodeType":"StructuredDocumentation","src":"12388:299:11","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":1969,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:11","nodeType":"FunctionDefinition","parameters":{"id":1965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1960,"mutability":"mutable","name":"token","nameLocation":"12719:5:11","nodeType":"VariableDeclaration","scope":1969,"src":"12711:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1959,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1962,"mutability":"mutable","name":"owner","nameLocation":"12734:5:11","nodeType":"VariableDeclaration","scope":1969,"src":"12726:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1961,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1964,"mutability":"mutable","name":"spender","nameLocation":"12749:7:11","nodeType":"VariableDeclaration","scope":1969,"src":"12741:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1963,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:11"},"returnParameters":{"id":1968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1967,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:11","nodeType":"VariableDeclaration","scope":1969,"src":"12781:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1966,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:11"},"scope":2144,"src":"12692:113:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1970,"nodeType":"StructuredDocumentation","src":"12811:475:11","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":1981,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:11","nodeType":"FunctionDefinition","parameters":{"id":1977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1972,"mutability":"mutable","name":"owner","nameLocation":"13316:5:11","nodeType":"VariableDeclaration","scope":1981,"src":"13308:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1971,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1974,"mutability":"mutable","name":"spender","nameLocation":"13331:7:11","nodeType":"VariableDeclaration","scope":1981,"src":"13323:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1973,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1976,"mutability":"mutable","name":"amount","nameLocation":"13348:6:11","nodeType":"VariableDeclaration","scope":1981,"src":"13340:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1975,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:11"},"returnParameters":{"id":1980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1979,"mutability":"mutable","name":"success","nameLocation":"13379:7:11","nodeType":"VariableDeclaration","scope":1981,"src":"13374:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1978,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:11"},"scope":2144,"src":"13291:97:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1982,"nodeType":"StructuredDocumentation","src":"13615:251:11","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":1989,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:11","nodeType":"FunctionDefinition","parameters":{"id":1985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1984,"mutability":"mutable","name":"pool","nameLocation":"13901:4:11","nodeType":"VariableDeclaration","scope":1989,"src":"13893:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1983,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:11"},"returnParameters":{"id":1988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1987,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:11","nodeType":"VariableDeclaration","scope":1989,"src":"13930:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1986,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:11"},"scope":2144,"src":"13871:76:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1990,"nodeType":"StructuredDocumentation","src":"13953:648:11","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":2003,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:11","nodeType":"FunctionDefinition","parameters":{"id":1993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1992,"mutability":"mutable","name":"pool","nameLocation":"14651:4:11","nodeType":"VariableDeclaration","scope":2003,"src":"14643:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1991,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:11"},"returnParameters":{"id":2002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1995,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:11","nodeType":"VariableDeclaration","scope":2003,"src":"14709:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1994,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1997,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:11","nodeType":"VariableDeclaration","scope":2003,"src":"14726:29:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1996,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1999,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:11","nodeType":"VariableDeclaration","scope":2003,"src":"14757:30:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1998,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:11","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2001,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:11","nodeType":"VariableDeclaration","scope":2003,"src":"14789:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2000,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:11"},"scope":2144,"src":"14606:205:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2004,"nodeType":"StructuredDocumentation","src":"15039:332:11","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":2012,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:11","nodeType":"FunctionDefinition","parameters":{"id":2008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2007,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:11","nodeType":"VariableDeclaration","scope":2012,"src":"15412:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":2006,"nodeType":"UserDefinedTypeName","pathNode":{"id":2005,"name":"IERC4626","nameLocations":["15412:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"15412:8:11"},"referencedDeclaration":7087,"src":"15412:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:11"},"returnParameters":{"id":2011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2010,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:11","nodeType":"VariableDeclaration","scope":2012,"src":"15458:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2009,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:11"},"scope":2144,"src":"15376:108:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2013,"nodeType":"StructuredDocumentation","src":"15490:477:11","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":2021,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:11","nodeType":"FunctionDefinition","parameters":{"id":2017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2016,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:11","nodeType":"VariableDeclaration","scope":2021,"src":"16003:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":2015,"nodeType":"UserDefinedTypeName","pathNode":{"id":2014,"name":"IERC4626","nameLocations":["16003:8:11"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"16003:8:11"},"referencedDeclaration":7087,"src":"16003:8:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:11"},"returnParameters":{"id":2020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2019,"mutability":"mutable","name":"asset","nameLocation":"16057:5:11","nodeType":"VariableDeclaration","scope":2021,"src":"16049:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2018,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:11"},"scope":2144,"src":"15972:92:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2022,"nodeType":"StructuredDocumentation","src":"16288:379:11","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":2032,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:11","nodeType":"FunctionDefinition","parameters":{"id":2028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2024,"mutability":"mutable","name":"pool","nameLocation":"16715:4:11","nodeType":"VariableDeclaration","scope":2032,"src":"16707:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2023,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2027,"mutability":"mutable","name":"token","nameLocation":"16728:5:11","nodeType":"VariableDeclaration","scope":2032,"src":"16721:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2026,"nodeType":"UserDefinedTypeName","pathNode":{"id":2025,"name":"IERC20","nameLocations":["16721:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"16721:6:11"},"referencedDeclaration":7165,"src":"16721:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:11"},"returnParameters":{"id":2031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2030,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:11","nodeType":"VariableDeclaration","scope":2032,"src":"16758:21:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2029,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:11"},"scope":2144,"src":"16672:109:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2033,"nodeType":"StructuredDocumentation","src":"16787:381:11","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":2043,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:11","nodeType":"FunctionDefinition","parameters":{"id":2039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2035,"mutability":"mutable","name":"pool","nameLocation":"17217:4:11","nodeType":"VariableDeclaration","scope":2043,"src":"17209:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2034,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2038,"mutability":"mutable","name":"token","nameLocation":"17230:5:11","nodeType":"VariableDeclaration","scope":2043,"src":"17223:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2037,"nodeType":"UserDefinedTypeName","pathNode":{"id":2036,"name":"IERC20","nameLocations":["17223:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"17223:6:11"},"referencedDeclaration":7165,"src":"17223:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:11"},"returnParameters":{"id":2042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2041,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:11","nodeType":"VariableDeclaration","scope":2043,"src":"17260:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2040,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:11"},"scope":2144,"src":"17173:111:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2044,"nodeType":"StructuredDocumentation","src":"17290:271:11","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":2051,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:11","nodeType":"FunctionDefinition","parameters":{"id":2047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2046,"mutability":"mutable","name":"pool","nameLocation":"17610:4:11","nodeType":"VariableDeclaration","scope":2051,"src":"17602:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2045,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:11"},"returnParameters":{"id":2050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2049,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:11","nodeType":"VariableDeclaration","scope":2051,"src":"17639:25:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2048,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:11"},"scope":2144,"src":"17566:100:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2052,"nodeType":"StructuredDocumentation","src":"17672:286:11","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":2060,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:11","nodeType":"FunctionDefinition","parameters":{"id":2055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2054,"mutability":"mutable","name":"pool","nameLocation":"18000:4:11","nodeType":"VariableDeclaration","scope":2060,"src":"17992:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2053,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:11"},"returnParameters":{"id":2059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2058,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:11","nodeType":"VariableDeclaration","scope":2060,"src":"18029:36:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":2057,"nodeType":"UserDefinedTypeName","pathNode":{"id":2056,"name":"PoolRoleAccounts","nameLocations":["18029:16:11"],"nodeType":"IdentifierPath","referencedDeclaration":2395,"src":"18029:16:11"},"referencedDeclaration":2395,"src":"18029:16:11","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:11"},"scope":2144,"src":"17963:104:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2061,"nodeType":"StructuredDocumentation","src":"18073:363:11","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":2071,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:11","nodeType":"FunctionDefinition","parameters":{"id":2067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2063,"mutability":"mutable","name":"pool","nameLocation":"18499:4:11","nodeType":"VariableDeclaration","scope":2071,"src":"18491:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2062,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2066,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:11","nodeType":"VariableDeclaration","scope":2071,"src":"18513:32:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2490_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":2065,"nodeType":"UserDefinedTypeName","pathNode":{"id":2064,"name":"PoolSwapParams","nameLocations":["18513:14:11"],"nodeType":"IdentifierPath","referencedDeclaration":2490,"src":"18513:14:11"},"referencedDeclaration":2490,"src":"18513:14:11","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2490_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:11"},"returnParameters":{"id":2070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2069,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:11","nodeType":"VariableDeclaration","scope":2071,"src":"18575:32:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2068,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:11"},"scope":2144,"src":"18441:168:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2072,"nodeType":"StructuredDocumentation","src":"18615:145:11","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":2078,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:11","nodeType":"FunctionDefinition","parameters":{"id":2073,"nodeType":"ParameterList","parameters":[],"src":"18798:2:11"},"returnParameters":{"id":2077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2076,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:11","nodeType":"VariableDeclaration","scope":2078,"src":"18824:44:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"},"typeName":{"id":2075,"nodeType":"UserDefinedTypeName","pathNode":{"id":2074,"name":"IProtocolFeeController","nameLocations":["18824:22:11"],"nodeType":"IdentifierPath","referencedDeclaration":791,"src":"18824:22:11"},"referencedDeclaration":791,"src":"18824:22:11","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:11"},"scope":2144,"src":"18765:105:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2079,"nodeType":"StructuredDocumentation","src":"19098:296:11","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":2086,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:11","nodeType":"FunctionDefinition","parameters":{"id":2082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2081,"mutability":"mutable","name":"pool","nameLocation":"19437:4:11","nodeType":"VariableDeclaration","scope":2086,"src":"19429:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2080,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:11"},"returnParameters":{"id":2085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2084,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:11","nodeType":"VariableDeclaration","scope":2086,"src":"19466:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2083,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:11"},"scope":2144,"src":"19399:88:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2087,"nodeType":"StructuredDocumentation","src":"19493:679:11","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":2102,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:11","nodeType":"FunctionDefinition","parameters":{"id":2097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2089,"mutability":"mutable","name":"pool","nameLocation":"20227:4:11","nodeType":"VariableDeclaration","scope":2102,"src":"20219:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2088,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2091,"mutability":"mutable","name":"from","nameLocation":"20249:4:11","nodeType":"VariableDeclaration","scope":2102,"src":"20241:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2090,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2093,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:11","nodeType":"VariableDeclaration","scope":2102,"src":"20263:24:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2092,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2096,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:11","nodeType":"VariableDeclaration","scope":2102,"src":"20297:30:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2094,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2095,"nodeType":"ArrayTypeName","src":"20297:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:11"},"returnParameters":{"id":2101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2100,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:11","nodeType":"VariableDeclaration","scope":2102,"src":"20352:27:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2098,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2099,"nodeType":"ArrayTypeName","src":"20352:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:11"},"scope":2144,"src":"20177:204:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2103,"nodeType":"StructuredDocumentation","src":"20602:699:11","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":2110,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:11","nodeType":"FunctionDefinition","parameters":{"id":2106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2105,"mutability":"mutable","name":"data","nameLocation":"21336:4:11","nodeType":"VariableDeclaration","scope":2110,"src":"21321:19:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2104,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:11"},"returnParameters":{"id":2109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2108,"mutability":"mutable","name":"result","nameLocation":"21373:6:11","nodeType":"VariableDeclaration","scope":2110,"src":"21360:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2107,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:11"},"scope":2144,"src":"21306:75:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2111,"nodeType":"StructuredDocumentation","src":"21387:731:11","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":2116,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:11","nodeType":"FunctionDefinition","parameters":{"id":2114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2113,"mutability":"mutable","name":"data","nameLocation":"22162:4:11","nodeType":"VariableDeclaration","scope":2116,"src":"22147:19:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2112,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:11"},"returnParameters":{"id":2115,"nodeType":"ParameterList","parameters":[],"src":"22176:0:11"},"scope":2144,"src":"22123:54:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2117,"nodeType":"StructuredDocumentation","src":"22183:239:11","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":2122,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:11","nodeType":"FunctionDefinition","parameters":{"id":2118,"nodeType":"ParameterList","parameters":[],"src":"22451:2:11"},"returnParameters":{"id":2121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2120,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:11","nodeType":"VariableDeclaration","scope":2122,"src":"22477:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2119,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:11"},"scope":2144,"src":"22427:70:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2123,"nodeType":"StructuredDocumentation","src":"22503:302:11","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":2128,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:11","nodeType":"FunctionDefinition","parameters":{"id":2124,"nodeType":"ParameterList","parameters":[],"src":"22845:2:11"},"returnParameters":{"id":2127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2126,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:11","nodeType":"VariableDeclaration","scope":2128,"src":"22871:29:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2125,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:11"},"scope":2144,"src":"22810:92:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2129,"nodeType":"StructuredDocumentation","src":"22908:162:11","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":2136,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:11","nodeType":"FunctionDefinition","parameters":{"id":2134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2131,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:11","nodeType":"VariableDeclaration","scope":2136,"src":"23103:16:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2130,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:11","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2133,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:11","nodeType":"VariableDeclaration","scope":2136,"src":"23121:24:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2132,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:11"},"returnParameters":{"id":2135,"nodeType":"ParameterList","parameters":[],"src":"23155:0:11"},"scope":2144,"src":"23075:81:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2137,"nodeType":"StructuredDocumentation","src":"23380:284:11","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":2143,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:11","nodeType":"FunctionDefinition","parameters":{"id":2138,"nodeType":"ParameterList","parameters":[],"src":"23691:2:11"},"returnParameters":{"id":2142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2141,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:11","nodeType":"VariableDeclaration","scope":2143,"src":"23717:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"},"typeName":{"id":2140,"nodeType":"UserDefinedTypeName","pathNode":{"id":2139,"name":"IAuthorizer","nameLocations":["23717:11:11"],"nodeType":"IdentifierPath","referencedDeclaration":251,"src":"23717:11:11"},"referencedDeclaration":251,"src":"23717:11:11","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:11"},"scope":2144,"src":"23669:72:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2145,"src":"767:22976:11","usedErrors":[],"usedEvents":[]}],"src":"46:23698:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[2525],"AddLiquidityParams":[2541],"AfterSwapParams":[2519],"BufferWrapOrUnwrapParams":[2580],"FEE_BITLENGTH":[2583],"FEE_SCALING_FACTOR":[2586],"HookFlags":[2345],"HooksConfig":[2369],"IERC20":[7165],"IERC4626":[7087],"IRateProvider":[57],"IVaultMain":[2280],"LiquidityManagement":[2298],"MAX_FEE_PERCENTAGE":[2589],"PoolConfig":[2323],"PoolConfigBits":[2300],"PoolData":[2447],"PoolRoleAccounts":[2395],"PoolSwapParams":[2490],"RemoveLiquidityKind":[2546],"RemoveLiquidityParams":[2562],"Rounding":[2450],"SwapKind":[2453],"SwapState":[2379],"TokenConfig":[2412],"TokenInfo":[2422],"TokenType":[2399],"VaultState":[2387],"VaultSwapParams":[2472],"WrappingDirection":[2565]},"id":2281,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2146,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2148,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2281,"sourceUnit":7166,"src":"72:72:12","symbolAliases":[{"foreign":{"id":2147,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"81:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2149,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2281,"sourceUnit":2590,"src":"146:26:12","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":2150,"nodeType":"StructuredDocumentation","src":"174:232:12","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":2280,"linearizedBaseContracts":[2280],"name":"IVaultMain","nameLocation":"417:10:12","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2151,"nodeType":"StructuredDocumentation","src":"656:431:12","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":2158,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:12","nodeType":"FunctionDefinition","parameters":{"id":2154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2153,"mutability":"mutable","name":"data","nameLocation":"1123:4:12","nodeType":"VariableDeclaration","scope":2158,"src":"1108:19:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2152,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:12"},"returnParameters":{"id":2157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2156,"mutability":"mutable","name":"result","nameLocation":"1160:6:12","nodeType":"VariableDeclaration","scope":2158,"src":"1147:19:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2155,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:12"},"scope":2280,"src":"1092:76:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2159,"nodeType":"StructuredDocumentation","src":"1174:1291:12","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":2169,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:12","nodeType":"FunctionDefinition","parameters":{"id":2165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2162,"mutability":"mutable","name":"token","nameLocation":"2493:5:12","nodeType":"VariableDeclaration","scope":2169,"src":"2486:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2161,"nodeType":"UserDefinedTypeName","pathNode":{"id":2160,"name":"IERC20","nameLocations":["2486:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2486:6:12"},"referencedDeclaration":7165,"src":"2486:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2164,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:12","nodeType":"VariableDeclaration","scope":2169,"src":"2500:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2163,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:12"},"returnParameters":{"id":2168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2167,"mutability":"mutable","name":"credit","nameLocation":"2546:6:12","nodeType":"VariableDeclaration","scope":2169,"src":"2538:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2166,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:12"},"scope":2280,"src":"2470:84:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2170,"nodeType":"StructuredDocumentation","src":"2560:315:12","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":2180,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:12","nodeType":"FunctionDefinition","parameters":{"id":2178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2173,"mutability":"mutable","name":"token","nameLocation":"2903:5:12","nodeType":"VariableDeclaration","scope":2180,"src":"2896:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2172,"nodeType":"UserDefinedTypeName","pathNode":{"id":2171,"name":"IERC20","nameLocations":["2896:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2896:6:12"},"referencedDeclaration":7165,"src":"2896:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2175,"mutability":"mutable","name":"to","nameLocation":"2918:2:12","nodeType":"VariableDeclaration","scope":2180,"src":"2910:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2174,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2177,"mutability":"mutable","name":"amount","nameLocation":"2930:6:12","nodeType":"VariableDeclaration","scope":2180,"src":"2922:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2176,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:12"},"returnParameters":{"id":2179,"nodeType":"ParameterList","parameters":[],"src":"2946:0:12"},"scope":2280,"src":"2880:67:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2181,"nodeType":"StructuredDocumentation","src":"3161:412:12","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":2193,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:12","nodeType":"FunctionDefinition","parameters":{"id":2185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2184,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:12","nodeType":"VariableDeclaration","scope":2193,"src":"3601:38:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2472_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":2183,"nodeType":"UserDefinedTypeName","pathNode":{"id":2182,"name":"VaultSwapParams","nameLocations":["3601:15:12"],"nodeType":"IdentifierPath","referencedDeclaration":2472,"src":"3601:15:12"},"referencedDeclaration":2472,"src":"3601:15:12","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2472_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:12"},"returnParameters":{"id":2192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2187,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:12","nodeType":"VariableDeclaration","scope":2193,"src":"3664:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2186,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2189,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:12","nodeType":"VariableDeclaration","scope":2193,"src":"3693:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2188,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2191,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:12","nodeType":"VariableDeclaration","scope":2193,"src":"3714:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2190,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:12"},"scope":2280,"src":"3578:158:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2194,"nodeType":"StructuredDocumentation","src":"3954:523:12","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":2207,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:12","nodeType":"FunctionDefinition","parameters":{"id":2198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2197,"mutability":"mutable","name":"params","nameLocation":"4539:6:12","nodeType":"VariableDeclaration","scope":2207,"src":"4513:32:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2541_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":2196,"nodeType":"UserDefinedTypeName","pathNode":{"id":2195,"name":"AddLiquidityParams","nameLocations":["4513:18:12"],"nodeType":"IdentifierPath","referencedDeclaration":2541,"src":"4513:18:12"},"referencedDeclaration":2541,"src":"4513:18:12","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2541_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:12"},"returnParameters":{"id":2206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2201,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:12","nodeType":"VariableDeclaration","scope":2207,"src":"4570:26:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2199,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2200,"nodeType":"ArrayTypeName","src":"4570:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2203,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:12","nodeType":"VariableDeclaration","scope":2207,"src":"4598:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2202,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2205,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:12","nodeType":"VariableDeclaration","scope":2207,"src":"4620:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2204,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:12"},"scope":2280,"src":"4482:163:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2208,"nodeType":"StructuredDocumentation","src":"4864:644:12","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":2221,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:12","nodeType":"FunctionDefinition","parameters":{"id":2212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2211,"mutability":"mutable","name":"params","nameLocation":"5576:6:12","nodeType":"VariableDeclaration","scope":2221,"src":"5547:35:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2562_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":2210,"nodeType":"UserDefinedTypeName","pathNode":{"id":2209,"name":"RemoveLiquidityParams","nameLocations":["5547:21:12"],"nodeType":"IdentifierPath","referencedDeclaration":2562,"src":"5547:21:12"},"referencedDeclaration":2562,"src":"5547:21:12","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2562_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:12"},"returnParameters":{"id":2220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2214,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:12","nodeType":"VariableDeclaration","scope":2221,"src":"5607:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2213,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2217,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:12","nodeType":"VariableDeclaration","scope":2221,"src":"5628:27:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2215,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2216,"nodeType":"ArrayTypeName","src":"5628:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2219,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:12","nodeType":"VariableDeclaration","scope":2221,"src":"5657:23:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2218,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:12"},"scope":2280,"src":"5513:169:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2222,"nodeType":"StructuredDocumentation","src":"5912:385:12","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":2234,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:12","nodeType":"FunctionDefinition","parameters":{"id":2228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2224,"mutability":"mutable","name":"pool","nameLocation":"6361:4:12","nodeType":"VariableDeclaration","scope":2234,"src":"6353:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2223,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2227,"mutability":"mutable","name":"token","nameLocation":"6382:5:12","nodeType":"VariableDeclaration","scope":2234,"src":"6375:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2226,"nodeType":"UserDefinedTypeName","pathNode":{"id":2225,"name":"IERC20","nameLocations":["6375:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"6375:6:12"},"referencedDeclaration":7165,"src":"6375:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:12"},"returnParameters":{"id":2233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2230,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:12","nodeType":"VariableDeclaration","scope":2234,"src":"6417:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2229,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2232,"mutability":"mutable","name":"index","nameLocation":"6445:5:12","nodeType":"VariableDeclaration","scope":2234,"src":"6437:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2231,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:12"},"scope":2280,"src":"6302:150:12","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2235,"nodeType":"StructuredDocumentation","src":"6683:460:12","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":2246,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:12","nodeType":"FunctionDefinition","parameters":{"id":2242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2237,"mutability":"mutable","name":"owner","nameLocation":"7174:5:12","nodeType":"VariableDeclaration","scope":2246,"src":"7166:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2236,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2239,"mutability":"mutable","name":"to","nameLocation":"7189:2:12","nodeType":"VariableDeclaration","scope":2246,"src":"7181:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2238,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2241,"mutability":"mutable","name":"amount","nameLocation":"7201:6:12","nodeType":"VariableDeclaration","scope":2246,"src":"7193:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2240,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:12"},"returnParameters":{"id":2245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2246,"src":"7227:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2243,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:12"},"scope":2280,"src":"7148:85:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2247,"nodeType":"StructuredDocumentation","src":"7239:544:12","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":2260,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:12","nodeType":"FunctionDefinition","parameters":{"id":2256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2249,"mutability":"mutable","name":"spender","nameLocation":"7818:7:12","nodeType":"VariableDeclaration","scope":2260,"src":"7810:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2248,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2251,"mutability":"mutable","name":"from","nameLocation":"7835:4:12","nodeType":"VariableDeclaration","scope":2260,"src":"7827:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2250,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2253,"mutability":"mutable","name":"to","nameLocation":"7849:2:12","nodeType":"VariableDeclaration","scope":2260,"src":"7841:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2252,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2255,"mutability":"mutable","name":"amount","nameLocation":"7861:6:12","nodeType":"VariableDeclaration","scope":2260,"src":"7853:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2254,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:12"},"returnParameters":{"id":2259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2258,"mutability":"mutable","name":"success","nameLocation":"7892:7:12","nodeType":"VariableDeclaration","scope":2260,"src":"7887:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2257,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:12"},"scope":2280,"src":"7788:113:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2261,"nodeType":"StructuredDocumentation","src":"8128:575:12","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":2273,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:12","nodeType":"FunctionDefinition","parameters":{"id":2265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2264,"mutability":"mutable","name":"params","nameLocation":"8784:6:12","nodeType":"VariableDeclaration","scope":2273,"src":"8752:38:12","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2580_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":2263,"nodeType":"UserDefinedTypeName","pathNode":{"id":2262,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:12"],"nodeType":"IdentifierPath","referencedDeclaration":2580,"src":"8752:24:12"},"referencedDeclaration":2580,"src":"8752:24:12","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2580_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:12"},"returnParameters":{"id":2272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2267,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:12","nodeType":"VariableDeclaration","scope":2273,"src":"8815:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2266,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2269,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:12","nodeType":"VariableDeclaration","scope":2273,"src":"8844:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2268,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2271,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:12","nodeType":"VariableDeclaration","scope":2273,"src":"8865:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2270,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:12"},"scope":2280,"src":"8708:179:12","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2274,"nodeType":"StructuredDocumentation","src":"9115:345:12","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":2279,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:12","nodeType":"FunctionDefinition","parameters":{"id":2275,"nodeType":"ParameterList","parameters":[],"src":"9491:2:12"},"returnParameters":{"id":2278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2277,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:12","nodeType":"VariableDeclaration","scope":2279,"src":"9517:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2276,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:12"},"scope":2280,"src":"9465:76:12","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2281,"src":"407:9136:12","usedErrors":[],"usedEvents":[]}],"src":"46:9498:12"},"id":12},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[2525],"AddLiquidityParams":[2541],"AfterSwapParams":[2519],"BufferWrapOrUnwrapParams":[2580],"FEE_BITLENGTH":[2583],"FEE_SCALING_FACTOR":[2586],"HookFlags":[2345],"HooksConfig":[2369],"IERC20":[7165],"IERC4626":[7087],"IRateProvider":[57],"LiquidityManagement":[2298],"MAX_FEE_PERCENTAGE":[2589],"PoolConfig":[2323],"PoolConfigBits":[2300],"PoolData":[2447],"PoolRoleAccounts":[2395],"PoolSwapParams":[2490],"RemoveLiquidityKind":[2546],"RemoveLiquidityParams":[2562],"Rounding":[2450],"SwapKind":[2453],"SwapState":[2379],"TokenConfig":[2412],"TokenInfo":[2422],"TokenType":[2399],"VaultState":[2387],"VaultSwapParams":[2472],"WrappingDirection":[2565]},"id":2590,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2282,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2284,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2590,"sourceUnit":7166,"src":"72:72:13","symbolAliases":[{"foreign":{"id":2283,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"81:6:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2286,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2590,"sourceUnit":7088,"src":"145:75:13","symbolAliases":[{"foreign":{"id":2285,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7087,"src":"154:8:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":2288,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2590,"sourceUnit":58,"src":"222:76:13","symbolAliases":[{"foreign":{"id":2287,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57,"src":"231:13:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":2289,"nodeType":"StructuredDocumentation","src":"300:472:13","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":2298,"members":[{"constant":false,"id":2291,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:13","nodeType":"VariableDeclaration","scope":2298,"src":"806:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2290,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:13","nodeType":"VariableDeclaration","scope":2298,"src":"843:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2292,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2295,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:13","nodeType":"VariableDeclaration","scope":2298,"src":"878:32:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2294,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2297,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:13","nodeType":"VariableDeclaration","scope":2298,"src":"916:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2296,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:13","nodeType":"StructDefinition","scope":2590,"src":"773:165:13","visibility":"public"},{"canonicalName":"PoolConfigBits","id":2300,"name":"PoolConfigBits","nameLocation":"1015:14:13","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:13","underlyingType":{"id":2299,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":2301,"nodeType":"StructuredDocumentation","src":"1043:1034:13","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":2323,"members":[{"constant":false,"id":2304,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:13","nodeType":"VariableDeclaration","scope":2323,"src":"2102:39:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2298_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2303,"nodeType":"UserDefinedTypeName","pathNode":{"id":2302,"name":"LiquidityManagement","nameLocations":["2102:19:13"],"nodeType":"IdentifierPath","referencedDeclaration":2298,"src":"2102:19:13"},"referencedDeclaration":2298,"src":"2102:19:13","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2298_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":2306,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:13","nodeType":"VariableDeclaration","scope":2323,"src":"2147:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2305,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2308,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:13","nodeType":"VariableDeclaration","scope":2323,"src":"2184:34:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2307,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2310,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:13","nodeType":"VariableDeclaration","scope":2323,"src":"2224:35:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2309,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2312,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:13","nodeType":"VariableDeclaration","scope":2323,"src":"2265:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":2311,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:13","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":2314,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:13","nodeType":"VariableDeclaration","scope":2323,"src":"2295:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2313,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:13","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2316,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:13","nodeType":"VariableDeclaration","scope":2323,"src":"2326:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2315,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2318,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:13","nodeType":"VariableDeclaration","scope":2323,"src":"2353:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2317,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2320,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:13","nodeType":"VariableDeclaration","scope":2323,"src":"2381:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2319,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2322,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:13","nodeType":"VariableDeclaration","scope":2323,"src":"2404:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2321,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:13","nodeType":"StructDefinition","scope":2590,"src":"2078:354:13","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":2324,"nodeType":"StructuredDocumentation","src":"2434:352:13","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":2345,"members":[{"constant":false,"id":2326,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:13","nodeType":"VariableDeclaration","scope":2345,"src":"2810:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2325,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2328,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:13","nodeType":"VariableDeclaration","scope":2345,"src":"2846:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2327,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2330,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:13","nodeType":"VariableDeclaration","scope":2345,"src":"2883:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2329,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:13","nodeType":"VariableDeclaration","scope":2345,"src":"2919:36:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2331,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2334,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:13","nodeType":"VariableDeclaration","scope":2345,"src":"2961:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2333,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:13","nodeType":"VariableDeclaration","scope":2345,"src":"2992:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2335,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2338,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:13","nodeType":"VariableDeclaration","scope":2345,"src":"3022:33:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2337,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:13","nodeType":"VariableDeclaration","scope":2345,"src":"3061:32:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2339,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2342,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:13","nodeType":"VariableDeclaration","scope":2345,"src":"3099:36:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2341,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2344,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:13","nodeType":"VariableDeclaration","scope":2345,"src":"3141:35:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2343,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:13","nodeType":"StructDefinition","scope":2590,"src":"2787:392:13","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":2346,"nodeType":"StructuredDocumentation","src":"3181:101:13","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":2369,"members":[{"constant":false,"id":2348,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:13","nodeType":"VariableDeclaration","scope":2369,"src":"3307:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2347,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2350,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:13","nodeType":"VariableDeclaration","scope":2369,"src":"3343:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2349,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2352,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:13","nodeType":"VariableDeclaration","scope":2369,"src":"3380:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2351,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2354,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:13","nodeType":"VariableDeclaration","scope":2369,"src":"3416:36:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2353,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2356,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:13","nodeType":"VariableDeclaration","scope":2369,"src":"3458:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2355,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2358,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:13","nodeType":"VariableDeclaration","scope":2369,"src":"3489:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2357,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:13","nodeType":"VariableDeclaration","scope":2369,"src":"3519:33:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2359,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2362,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:13","nodeType":"VariableDeclaration","scope":2369,"src":"3558:32:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2361,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2364,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:13","nodeType":"VariableDeclaration","scope":2369,"src":"3596:36:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2363,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2366,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:13","nodeType":"VariableDeclaration","scope":2369,"src":"3638:35:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2365,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2368,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:13","nodeType":"VariableDeclaration","scope":2369,"src":"3679:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2367,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:13","nodeType":"StructDefinition","scope":2590,"src":"3282:421:13","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":2370,"nodeType":"StructuredDocumentation","src":"3705:364:13","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":2379,"members":[{"constant":false,"id":2372,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:13","nodeType":"VariableDeclaration","scope":2379,"src":"4093:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2371,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:13","nodeType":"VariableDeclaration","scope":2379,"src":"4114:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2373,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2376,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:13","nodeType":"VariableDeclaration","scope":2379,"src":"4136:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2375,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2378,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:13","nodeType":"VariableDeclaration","scope":2379,"src":"4169:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2377,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:13","nodeType":"StructDefinition","scope":2590,"src":"4070:127:13","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":2380,"nodeType":"StructuredDocumentation","src":"4199:381:13","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":2387,"members":[{"constant":false,"id":2382,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:13","nodeType":"VariableDeclaration","scope":2387,"src":"4605:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2381,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2384,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:13","nodeType":"VariableDeclaration","scope":2387,"src":"4631:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2383,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2386,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:13","nodeType":"VariableDeclaration","scope":2387,"src":"4655:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2385,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:13","nodeType":"StructDefinition","scope":2590,"src":"4581:98:13","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":2388,"nodeType":"StructuredDocumentation","src":"4681:461:13","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":2395,"members":[{"constant":false,"id":2390,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:13","nodeType":"VariableDeclaration","scope":2395,"src":"5173:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2389,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2392,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:13","nodeType":"VariableDeclaration","scope":2395,"src":"5199:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2391,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2394,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:13","nodeType":"VariableDeclaration","scope":2395,"src":"5227:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2393,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:13","nodeType":"StructDefinition","scope":2590,"src":"5143:106:13","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":2396,"nodeType":"StructuredDocumentation","src":"9245:1024:13","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":2399,"members":[{"id":2397,"name":"STANDARD","nameLocation":"10291:8:13","nodeType":"EnumValue","src":"10291:8:13"},{"id":2398,"name":"WITH_RATE","nameLocation":"10305:9:13","nodeType":"EnumValue","src":"10305:9:13"}],"name":"TokenType","nameLocation":"10275:9:13","nodeType":"EnumDefinition","src":"10270:46:13"},{"canonicalName":"TokenConfig","documentation":{"id":2400,"nodeType":"StructuredDocumentation","src":"10318:915:13","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2412,"members":[{"constant":false,"id":2403,"mutability":"mutable","name":"token","nameLocation":"11266:5:13","nodeType":"VariableDeclaration","scope":2412,"src":"11259:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2402,"nodeType":"UserDefinedTypeName","pathNode":{"id":2401,"name":"IERC20","nameLocations":["11259:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"11259:6:13"},"referencedDeclaration":7165,"src":"11259:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2406,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:13","nodeType":"VariableDeclaration","scope":2412,"src":"11277:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2399","typeString":"enum TokenType"},"typeName":{"id":2405,"nodeType":"UserDefinedTypeName","pathNode":{"id":2404,"name":"TokenType","nameLocations":["11277:9:13"],"nodeType":"IdentifierPath","referencedDeclaration":2399,"src":"11277:9:13"},"referencedDeclaration":2399,"src":"11277:9:13","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2399","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2409,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:13","nodeType":"VariableDeclaration","scope":2412,"src":"11302:26:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"},"typeName":{"id":2408,"nodeType":"UserDefinedTypeName","pathNode":{"id":2407,"name":"IRateProvider","nameLocations":["11302:13:13"],"nodeType":"IdentifierPath","referencedDeclaration":57,"src":"11302:13:13"},"referencedDeclaration":57,"src":"11302:13:13","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2411,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:13","nodeType":"VariableDeclaration","scope":2412,"src":"11334:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2410,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:13","nodeType":"StructDefinition","scope":2590,"src":"11234:121:13","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":2413,"nodeType":"StructuredDocumentation","src":"11357:592:13","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2422,"members":[{"constant":false,"id":2416,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:13","nodeType":"VariableDeclaration","scope":2422,"src":"11973:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2399","typeString":"enum TokenType"},"typeName":{"id":2415,"nodeType":"UserDefinedTypeName","pathNode":{"id":2414,"name":"TokenType","nameLocations":["11973:9:13"],"nodeType":"IdentifierPath","referencedDeclaration":2399,"src":"11973:9:13"},"referencedDeclaration":2399,"src":"11973:9:13","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2399","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2419,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:13","nodeType":"VariableDeclaration","scope":2422,"src":"11998:26:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"},"typeName":{"id":2418,"nodeType":"UserDefinedTypeName","pathNode":{"id":2417,"name":"IRateProvider","nameLocations":["11998:13:13"],"nodeType":"IdentifierPath","referencedDeclaration":57,"src":"11998:13:13"},"referencedDeclaration":57,"src":"11998:13:13","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2421,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:13","nodeType":"VariableDeclaration","scope":2422,"src":"12030:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2420,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:13","nodeType":"StructDefinition","scope":2590,"src":"11950:101:13","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":2423,"nodeType":"StructuredDocumentation","src":"12053:761:13","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":2447,"members":[{"constant":false,"id":2426,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:13","nodeType":"VariableDeclaration","scope":2447,"src":"12837:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2300","typeString":"PoolConfigBits"},"typeName":{"id":2425,"nodeType":"UserDefinedTypeName","pathNode":{"id":2424,"name":"PoolConfigBits","nameLocations":["12837:14:13"],"nodeType":"IdentifierPath","referencedDeclaration":2300,"src":"12837:14:13"},"referencedDeclaration":2300,"src":"12837:14:13","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2300","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":2430,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:13","nodeType":"VariableDeclaration","scope":2447,"src":"12872:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2428,"nodeType":"UserDefinedTypeName","pathNode":{"id":2427,"name":"IERC20","nameLocations":["12872:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"12872:6:13"},"referencedDeclaration":7165,"src":"12872:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":2429,"nodeType":"ArrayTypeName","src":"12872:8:13","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2434,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:13","nodeType":"VariableDeclaration","scope":2447,"src":"12893:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2422_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":2432,"nodeType":"UserDefinedTypeName","pathNode":{"id":2431,"name":"TokenInfo","nameLocations":["12893:9:13"],"nodeType":"IdentifierPath","referencedDeclaration":2422,"src":"12893:9:13"},"referencedDeclaration":2422,"src":"12893:9:13","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2422_storage_ptr","typeString":"struct TokenInfo"}},"id":2433,"nodeType":"ArrayTypeName","src":"12893:11:13","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2422_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":2437,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:13","nodeType":"VariableDeclaration","scope":2447,"src":"12920:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2435,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2436,"nodeType":"ArrayTypeName","src":"12920:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2440,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:13","nodeType":"VariableDeclaration","scope":2447,"src":"12947:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2438,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2439,"nodeType":"ArrayTypeName","src":"12947:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2443,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:13","nodeType":"VariableDeclaration","scope":2447,"src":"12983:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2441,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2442,"nodeType":"ArrayTypeName","src":"12983:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2446,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:13","nodeType":"VariableDeclaration","scope":2447,"src":"13009:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2444,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2445,"nodeType":"ArrayTypeName","src":"13009:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:13","nodeType":"StructDefinition","scope":2590,"src":"12815:228:13","visibility":"public"},{"canonicalName":"Rounding","id":2450,"members":[{"id":2448,"name":"ROUND_UP","nameLocation":"13065:8:13","nodeType":"EnumValue","src":"13065:8:13"},{"id":2449,"name":"ROUND_DOWN","nameLocation":"13079:10:13","nodeType":"EnumValue","src":"13079:10:13"}],"name":"Rounding","nameLocation":"13050:8:13","nodeType":"EnumDefinition","src":"13045:46:13"},{"canonicalName":"SwapKind","id":2453,"members":[{"id":2451,"name":"EXACT_IN","nameLocation":"13318:8:13","nodeType":"EnumValue","src":"13318:8:13"},{"id":2452,"name":"EXACT_OUT","nameLocation":"13332:9:13","nodeType":"EnumValue","src":"13332:9:13"}],"name":"SwapKind","nameLocation":"13303:8:13","nodeType":"EnumDefinition","src":"13298:45:13"},{"canonicalName":"VaultSwapParams","documentation":{"id":2454,"nodeType":"StructuredDocumentation","src":"14089:558:13","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":2472,"members":[{"constant":false,"id":2457,"mutability":"mutable","name":"kind","nameLocation":"14686:4:13","nodeType":"VariableDeclaration","scope":2472,"src":"14677:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2453","typeString":"enum SwapKind"},"typeName":{"id":2456,"nodeType":"UserDefinedTypeName","pathNode":{"id":2455,"name":"SwapKind","nameLocations":["14677:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2453,"src":"14677:8:13"},"referencedDeclaration":2453,"src":"14677:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2453","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2459,"mutability":"mutable","name":"pool","nameLocation":"14704:4:13","nodeType":"VariableDeclaration","scope":2472,"src":"14696:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2458,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2462,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:13","nodeType":"VariableDeclaration","scope":2472,"src":"14714:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2461,"nodeType":"UserDefinedTypeName","pathNode":{"id":2460,"name":"IERC20","nameLocations":["14714:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"14714:6:13"},"referencedDeclaration":7165,"src":"14714:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2465,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:13","nodeType":"VariableDeclaration","scope":2472,"src":"14734:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2464,"nodeType":"UserDefinedTypeName","pathNode":{"id":2463,"name":"IERC20","nameLocations":["14734:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"14734:6:13"},"referencedDeclaration":7165,"src":"14734:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2467,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:13","nodeType":"VariableDeclaration","scope":2472,"src":"14755:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2466,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2469,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:13","nodeType":"VariableDeclaration","scope":2472,"src":"14783:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2468,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2471,"mutability":"mutable","name":"userData","nameLocation":"14811:8:13","nodeType":"VariableDeclaration","scope":2472,"src":"14805:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2470,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:13","nodeType":"StructDefinition","scope":2590,"src":"14648:174:13","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":2473,"nodeType":"StructuredDocumentation","src":"14824:530:13","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":2490,"members":[{"constant":false,"id":2476,"mutability":"mutable","name":"kind","nameLocation":"15392:4:13","nodeType":"VariableDeclaration","scope":2490,"src":"15383:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2453","typeString":"enum SwapKind"},"typeName":{"id":2475,"nodeType":"UserDefinedTypeName","pathNode":{"id":2474,"name":"SwapKind","nameLocations":["15383:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2453,"src":"15383:8:13"},"referencedDeclaration":2453,"src":"15383:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2453","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2478,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:13","nodeType":"VariableDeclaration","scope":2490,"src":"15402:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2477,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2481,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:13","nodeType":"VariableDeclaration","scope":2490,"src":"15435:26:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2479,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2480,"nodeType":"ArrayTypeName","src":"15435:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2483,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:13","nodeType":"VariableDeclaration","scope":2490,"src":"15467:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2482,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2485,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:13","nodeType":"VariableDeclaration","scope":2490,"src":"15488:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2484,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2487,"mutability":"mutable","name":"router","nameLocation":"15518:6:13","nodeType":"VariableDeclaration","scope":2490,"src":"15510:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2486,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2489,"mutability":"mutable","name":"userData","nameLocation":"15536:8:13","nodeType":"VariableDeclaration","scope":2490,"src":"15530:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2488,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:13","nodeType":"StructDefinition","scope":2590,"src":"15355:192:13","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":2491,"nodeType":"StructuredDocumentation","src":"15549:813:13","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":2519,"members":[{"constant":false,"id":2494,"mutability":"mutable","name":"kind","nameLocation":"16401:4:13","nodeType":"VariableDeclaration","scope":2519,"src":"16392:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2453","typeString":"enum SwapKind"},"typeName":{"id":2493,"nodeType":"UserDefinedTypeName","pathNode":{"id":2492,"name":"SwapKind","nameLocations":["16392:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2453,"src":"16392:8:13"},"referencedDeclaration":2453,"src":"16392:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2453","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2497,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:13","nodeType":"VariableDeclaration","scope":2519,"src":"16411:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2496,"nodeType":"UserDefinedTypeName","pathNode":{"id":2495,"name":"IERC20","nameLocations":["16411:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"16411:6:13"},"referencedDeclaration":7165,"src":"16411:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2500,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:13","nodeType":"VariableDeclaration","scope":2519,"src":"16431:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2499,"nodeType":"UserDefinedTypeName","pathNode":{"id":2498,"name":"IERC20","nameLocations":["16431:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"16431:6:13"},"referencedDeclaration":7165,"src":"16431:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2502,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:13","nodeType":"VariableDeclaration","scope":2519,"src":"16452:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2501,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2504,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:13","nodeType":"VariableDeclaration","scope":2519,"src":"16482:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2503,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2506,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:13","nodeType":"VariableDeclaration","scope":2519,"src":"16513:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2505,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2508,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:13","nodeType":"VariableDeclaration","scope":2519,"src":"16549:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2507,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2510,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:13","nodeType":"VariableDeclaration","scope":2519,"src":"16586:32:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2509,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2512,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:13","nodeType":"VariableDeclaration","scope":2519,"src":"16624:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2511,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2514,"mutability":"mutable","name":"router","nameLocation":"16665:6:13","nodeType":"VariableDeclaration","scope":2519,"src":"16657:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2513,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2516,"mutability":"mutable","name":"pool","nameLocation":"16685:4:13","nodeType":"VariableDeclaration","scope":2519,"src":"16677:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2515,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2518,"mutability":"mutable","name":"userData","nameLocation":"16701:8:13","nodeType":"VariableDeclaration","scope":2519,"src":"16695:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2517,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:13","nodeType":"StructDefinition","scope":2590,"src":"16363:349:13","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":2525,"members":[{"id":2520,"name":"PROPORTIONAL","nameLocation":"16951:12:13","nodeType":"EnumValue","src":"16951:12:13"},{"id":2521,"name":"UNBALANCED","nameLocation":"16969:10:13","nodeType":"EnumValue","src":"16969:10:13"},{"id":2522,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:13","nodeType":"EnumValue","src":"16985:22:13"},{"id":2523,"name":"DONATION","nameLocation":"17013:8:13","nodeType":"EnumValue","src":"17013:8:13"},{"id":2524,"name":"CUSTOM","nameLocation":"17027:6:13","nodeType":"EnumValue","src":"17027:6:13"}],"name":"AddLiquidityKind","nameLocation":"16928:16:13","nodeType":"EnumDefinition","src":"16923:112:13"},{"canonicalName":"AddLiquidityParams","documentation":{"id":2526,"nodeType":"StructuredDocumentation","src":"17037:320:13","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":2541,"members":[{"constant":false,"id":2528,"mutability":"mutable","name":"pool","nameLocation":"17398:4:13","nodeType":"VariableDeclaration","scope":2541,"src":"17390:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2527,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2530,"mutability":"mutable","name":"to","nameLocation":"17416:2:13","nodeType":"VariableDeclaration","scope":2541,"src":"17408:10:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2529,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2533,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:13","nodeType":"VariableDeclaration","scope":2541,"src":"17424:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2531,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2532,"nodeType":"ArrayTypeName","src":"17424:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2535,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:13","nodeType":"VariableDeclaration","scope":2541,"src":"17452:23:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2534,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2538,"mutability":"mutable","name":"kind","nameLocation":"17498:4:13","nodeType":"VariableDeclaration","scope":2541,"src":"17481:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2525","typeString":"enum AddLiquidityKind"},"typeName":{"id":2537,"nodeType":"UserDefinedTypeName","pathNode":{"id":2536,"name":"AddLiquidityKind","nameLocations":["17481:16:13"],"nodeType":"IdentifierPath","referencedDeclaration":2525,"src":"17481:16:13"},"referencedDeclaration":2525,"src":"17481:16:13","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2525","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2540,"mutability":"mutable","name":"userData","nameLocation":"17514:8:13","nodeType":"VariableDeclaration","scope":2541,"src":"17508:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2539,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:13","nodeType":"StructDefinition","scope":2590,"src":"17358:167:13","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":2546,"members":[{"id":2542,"name":"PROPORTIONAL","nameLocation":"17770:12:13","nodeType":"EnumValue","src":"17770:12:13"},{"id":2543,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:13","nodeType":"EnumValue","src":"17788:21:13"},{"id":2544,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:13","nodeType":"EnumValue","src":"17815:22:13"},{"id":2545,"name":"CUSTOM","nameLocation":"17843:6:13","nodeType":"EnumValue","src":"17843:6:13"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:13","nodeType":"EnumDefinition","src":"17739:112:13"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":2547,"nodeType":"StructuredDocumentation","src":"17853:330:13","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":2562,"members":[{"constant":false,"id":2549,"mutability":"mutable","name":"pool","nameLocation":"18227:4:13","nodeType":"VariableDeclaration","scope":2562,"src":"18219:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2548,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2551,"mutability":"mutable","name":"from","nameLocation":"18245:4:13","nodeType":"VariableDeclaration","scope":2562,"src":"18237:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2550,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2553,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:13","nodeType":"VariableDeclaration","scope":2562,"src":"18255:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2552,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2556,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:13","nodeType":"VariableDeclaration","scope":2562,"src":"18283:23:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2554,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2555,"nodeType":"ArrayTypeName","src":"18283:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2559,"mutability":"mutable","name":"kind","nameLocation":"18332:4:13","nodeType":"VariableDeclaration","scope":2562,"src":"18312:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2546","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2558,"nodeType":"UserDefinedTypeName","pathNode":{"id":2557,"name":"RemoveLiquidityKind","nameLocations":["18312:19:13"],"nodeType":"IdentifierPath","referencedDeclaration":2546,"src":"18312:19:13"},"referencedDeclaration":2546,"src":"18312:19:13","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2546","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2561,"mutability":"mutable","name":"userData","nameLocation":"18348:8:13","nodeType":"VariableDeclaration","scope":2562,"src":"18342:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2560,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:13","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:13","nodeType":"StructDefinition","scope":2590,"src":"18184:175:13","visibility":"public"},{"canonicalName":"WrappingDirection","id":2565,"members":[{"id":2563,"name":"WRAP","nameLocation":"18602:4:13","nodeType":"EnumValue","src":"18602:4:13"},{"id":2564,"name":"UNWRAP","nameLocation":"18612:6:13","nodeType":"EnumValue","src":"18612:6:13"}],"name":"WrappingDirection","nameLocation":"18578:17:13","nodeType":"EnumDefinition","src":"18573:47:13"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":2566,"nodeType":"StructuredDocumentation","src":"18622:499:13","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":2580,"members":[{"constant":false,"id":2569,"mutability":"mutable","name":"kind","nameLocation":"19169:4:13","nodeType":"VariableDeclaration","scope":2580,"src":"19160:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2453","typeString":"enum SwapKind"},"typeName":{"id":2568,"nodeType":"UserDefinedTypeName","pathNode":{"id":2567,"name":"SwapKind","nameLocations":["19160:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":2453,"src":"19160:8:13"},"referencedDeclaration":2453,"src":"19160:8:13","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2453","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2572,"mutability":"mutable","name":"direction","nameLocation":"19197:9:13","nodeType":"VariableDeclaration","scope":2580,"src":"19179:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2565","typeString":"enum WrappingDirection"},"typeName":{"id":2571,"nodeType":"UserDefinedTypeName","pathNode":{"id":2570,"name":"WrappingDirection","nameLocations":["19179:17:13"],"nodeType":"IdentifierPath","referencedDeclaration":2565,"src":"19179:17:13"},"referencedDeclaration":2565,"src":"19179:17:13","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2565","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":2575,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:13","nodeType":"VariableDeclaration","scope":2580,"src":"19212:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"},"typeName":{"id":2574,"nodeType":"UserDefinedTypeName","pathNode":{"id":2573,"name":"IERC4626","nameLocations":["19212:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":7087,"src":"19212:8:13"},"referencedDeclaration":7087,"src":"19212:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7087","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2577,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:13","nodeType":"VariableDeclaration","scope":2580,"src":"19239:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2576,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2579,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:13","nodeType":"VariableDeclaration","scope":2580,"src":"19267:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2578,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:13","nodeType":"StructDefinition","scope":2590,"src":"19122:164:13","visibility":"public"},{"constant":true,"id":2583,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:13","nodeType":"VariableDeclaration","scope":2590,"src":"19594:35:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2581,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":2582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:13","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":2586,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:13","nodeType":"VariableDeclaration","scope":2590,"src":"19631:42:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2584,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":2585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:13","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":2589,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:13","nodeType":"VariableDeclaration","scope":2590,"src":"19879:48:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2587,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":2588,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:13","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:13"},"id":13},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[2669],"IAuthentication":[47]},"id":2670,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2591,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":2593,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2670,"sourceUnit":48,"src":"72:116:14","symbolAliases":[{"foreign":{"id":2592,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2595,"name":"IAuthentication","nameLocations":["625:15:14"],"nodeType":"IdentifierPath","referencedDeclaration":47,"src":"625:15:14"},"id":2596,"nodeType":"InheritanceSpecifier","src":"625:15:14"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2594,"nodeType":"StructuredDocumentation","src":"190:398:14","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":2669,"linearizedBaseContracts":[2669,47],"name":"Authentication","nameLocation":"607:14:14","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2598,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:14","nodeType":"VariableDeclaration","scope":2669,"src":"647:48:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2597,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":2608,"nodeType":"Block","src":"1337:63:14","statements":[{"expression":{"id":2606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2604,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2598,"src":"1347:22:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2605,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2601,"src":"1372:21:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2607,"nodeType":"ExpressionStatement","src":"1347:46:14"}]},"documentation":{"id":2599,"nodeType":"StructuredDocumentation","src":"702:587:14","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":2609,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2601,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:14","nodeType":"VariableDeclaration","scope":2609,"src":"1306:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2600,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:14"},"returnParameters":{"id":2603,"nodeType":"ParameterList","parameters":[],"src":"1337:0:14"},"scope":2669,"src":"1294:106:14","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2616,"nodeType":"Block","src":"1549:49:14","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2612,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2640,"src":"1559:19:14","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2614,"nodeType":"ExpressionStatement","src":"1559:21:14"},{"id":2615,"nodeType":"PlaceholderStatement","src":"1590:1:14"}]},"documentation":{"id":2610,"nodeType":"StructuredDocumentation","src":"1406:114:14","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":2617,"name":"authenticate","nameLocation":"1534:12:14","nodeType":"ModifierDefinition","parameters":{"id":2611,"nodeType":"ParameterList","parameters":[],"src":"1546:2:14"},"src":"1525:73:14","virtual":false,"visibility":"internal"},{"body":{"id":2639,"nodeType":"Block","src":"1733:156:14","statements":[{"assignments":[2622],"declarations":[{"constant":false,"id":2622,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:14","nodeType":"VariableDeclaration","scope":2639,"src":"1743:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2621,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2627,"initialValue":{"arguments":[{"expression":{"id":2624,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:14","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:14","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":2623,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2658,"src":"1762:11:14","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":2626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:14"},{"condition":{"id":2633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:14","subExpression":{"arguments":[{"id":2629,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2622,"src":"1810:8:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2630,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:14","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2628,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2668,"src":"1798:11:14","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2638,"nodeType":"IfStatement","src":"1793:90:14","trueBody":{"id":2637,"nodeType":"Block","src":"1833:50:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2634,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1854:16:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2636,"nodeType":"RevertStatement","src":"1847:25:14"}]}}]},"documentation":{"id":2618,"nodeType":"StructuredDocumentation","src":"1604:79:14","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":2640,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:14","nodeType":"FunctionDefinition","parameters":{"id":2619,"nodeType":"ParameterList","parameters":[],"src":"1716:2:14"},"returnParameters":{"id":2620,"nodeType":"ParameterList","parameters":[],"src":"1733:0:14"},"scope":2669,"src":"1688:201:14","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[46],"body":{"id":2657,"nodeType":"Block","src":"2008:353:14","statements":[{"expression":{"arguments":[{"arguments":[{"id":2652,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2598,"src":"2320:22:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2653,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2643,"src":"2344:8:14","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":2650,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:14","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:14","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:14","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2649,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:14","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2648,"id":2656,"nodeType":"Return","src":"2286:68:14"}]},"documentation":{"id":2641,"nodeType":"StructuredDocumentation","src":"1895:31:14","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":2658,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:14","nodeType":"FunctionDefinition","overrides":{"id":2645,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:14"},"parameters":{"id":2644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2643,"mutability":"mutable","name":"selector","nameLocation":"1959:8:14","nodeType":"VariableDeclaration","scope":2658,"src":"1952:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2642,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:14","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:14"},"returnParameters":{"id":2648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2647,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2658,"src":"1999:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2646,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:14"},"scope":2669,"src":"1931:430:14","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":2659,"nodeType":"StructuredDocumentation","src":"2367:304:14","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":2668,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:14","nodeType":"FunctionDefinition","parameters":{"id":2664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2661,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:14","nodeType":"VariableDeclaration","scope":2668,"src":"2697:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2660,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2663,"mutability":"mutable","name":"user","nameLocation":"2723:4:14","nodeType":"VariableDeclaration","scope":2668,"src":"2715:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2662,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:14"},"returnParameters":{"id":2667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2666,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2668,"src":"2760:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2665,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:14"},"scope":2669,"src":"2676:90:14","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":2670,"src":"589:2179:14","usedErrors":[38],"usedEvents":[]}],"src":"46:2723:14"},"id":14},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[2701],"IERC20":[7165]},"id":2702,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2671,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2673,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2702,"sourceUnit":7166,"src":"72:72:15","symbolAliases":[{"foreign":{"id":2672,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"81:6:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":2674,"nodeType":"StructuredDocumentation","src":"146:71:15","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":2701,"linearizedBaseContracts":[2701],"name":"CastingHelpers","nameLocation":"225:14:15","nodeType":"ContractDefinition","nodes":[{"body":{"id":2686,"nodeType":"Block","src":"410:140:15","statements":[{"AST":{"nativeSrc":"501:43:15","nodeType":"YulBlock","src":"501:43:15","statements":[{"nativeSrc":"515:19:15","nodeType":"YulAssignment","src":"515:19:15","value":{"name":"addresses","nativeSrc":"525:9:15","nodeType":"YulIdentifier","src":"525:9:15"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:15","nodeType":"YulIdentifier","src":"515:6:15"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2678,"isOffset":false,"isSlot":false,"src":"525:9:15","valueSize":1},{"declaration":2683,"isOffset":false,"isSlot":false,"src":"515:6:15","valueSize":1}],"flags":["memory-safe"],"id":2685,"nodeType":"InlineAssembly","src":"476:68:15"}]},"documentation":{"id":2675,"nodeType":"StructuredDocumentation","src":"246:66:15","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":2687,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:15","nodeType":"FunctionDefinition","parameters":{"id":2679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2678,"mutability":"mutable","name":"addresses","nameLocation":"352:9:15","nodeType":"VariableDeclaration","scope":2687,"src":"335:26:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2676,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2677,"nodeType":"ArrayTypeName","src":"335:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:15"},"returnParameters":{"id":2684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2683,"mutability":"mutable","name":"tokens","nameLocation":"402:6:15","nodeType":"VariableDeclaration","scope":2687,"src":"386:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2681,"nodeType":"UserDefinedTypeName","pathNode":{"id":2680,"name":"IERC20","nameLocations":["386:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"386:6:15"},"referencedDeclaration":7165,"src":"386:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":2682,"nodeType":"ArrayTypeName","src":"386:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:15"},"scope":2701,"src":"317:233:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2699,"nodeType":"Block","src":"712:140:15","statements":[{"AST":{"nativeSrc":"803:43:15","nodeType":"YulBlock","src":"803:43:15","statements":[{"nativeSrc":"817:19:15","nodeType":"YulAssignment","src":"817:19:15","value":{"name":"tokens","nativeSrc":"830:6:15","nodeType":"YulIdentifier","src":"830:6:15"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:15","nodeType":"YulIdentifier","src":"817:9:15"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2696,"isOffset":false,"isSlot":false,"src":"817:9:15","valueSize":1},{"declaration":2692,"isOffset":false,"isSlot":false,"src":"830:6:15","valueSize":1}],"flags":["memory-safe"],"id":2698,"nodeType":"InlineAssembly","src":"778:68:15"}]},"documentation":{"id":2688,"nodeType":"StructuredDocumentation","src":"556:57:15","text":"@dev Returns an IERC20[] array as an address[] array."},"id":2700,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:15","nodeType":"FunctionDefinition","parameters":{"id":2693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2692,"mutability":"mutable","name":"tokens","nameLocation":"653:6:15","nodeType":"VariableDeclaration","scope":2700,"src":"637:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2690,"nodeType":"UserDefinedTypeName","pathNode":{"id":2689,"name":"IERC20","nameLocations":["637:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"637:6:15"},"referencedDeclaration":7165,"src":"637:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":2691,"nodeType":"ArrayTypeName","src":"637:8:15","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:15"},"returnParameters":{"id":2697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2696,"mutability":"mutable","name":"addresses","nameLocation":"701:9:15","nodeType":"VariableDeclaration","scope":2700,"src":"684:26:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2694,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2695,"nodeType":"ArrayTypeName","src":"684:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:15"},"scope":2701,"src":"618:234:15","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2702,"src":"217:637:15","usedErrors":[],"usedEvents":[]}],"src":"46:809:15"},"id":15},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[2701],"IERC20":[7165],"InputHelpers":[3002]},"id":3003,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2703,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2705,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3003,"sourceUnit":7166,"src":"72:72:16","symbolAliases":[{"foreign":{"id":2704,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"81:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":2707,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3003,"sourceUnit":2702,"src":"146:54:16","symbolAliases":[{"foreign":{"id":2706,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2701,"src":"155:14:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":3002,"linearizedBaseContracts":[3002],"name":"InputHelpers","nameLocation":"210:12:16","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2708,"nodeType":"StructuredDocumentation","src":"229:91:16","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":2710,"name":"InputLengthMismatch","nameLocation":"331:19:16","nodeType":"ErrorDefinition","parameters":{"id":2709,"nodeType":"ParameterList","parameters":[],"src":"350:2:16"},"src":"325:28:16"},{"documentation":{"id":2711,"nodeType":"StructuredDocumentation","src":"359:332:16","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":2713,"name":"MultipleNonZeroInputs","nameLocation":"702:21:16","nodeType":"ErrorDefinition","parameters":{"id":2712,"nodeType":"ParameterList","parameters":[],"src":"723:2:16"},"src":"696:30:16"},{"documentation":{"id":2714,"nodeType":"StructuredDocumentation","src":"732:298:16","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":2716,"name":"AllZeroInputs","nameLocation":"1041:13:16","nodeType":"ErrorDefinition","parameters":{"id":2715,"nodeType":"ParameterList","parameters":[],"src":"1054:2:16"},"src":"1035:22:16"},{"documentation":{"id":2717,"nodeType":"StructuredDocumentation","src":"1063:320:16","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":2719,"name":"TokensNotSorted","nameLocation":"1394:15:16","nodeType":"ErrorDefinition","parameters":{"id":2718,"nodeType":"ParameterList","parameters":[],"src":"1409:2:16"},"src":"1388:24:16"},{"body":{"id":2734,"nodeType":"Block","src":"1486:81:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2726,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2721,"src":"1500:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2727,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2723,"src":"1505:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2733,"nodeType":"IfStatement","src":"1496:65:16","trueBody":{"id":2732,"nodeType":"Block","src":"1508:53:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2729,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2710,"src":"1529:19:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2731,"nodeType":"RevertStatement","src":"1522:28:16"}]}}]},"id":2735,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:16","nodeType":"FunctionDefinition","parameters":{"id":2724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2721,"mutability":"mutable","name":"a","nameLocation":"1458:1:16","nodeType":"VariableDeclaration","scope":2735,"src":"1450:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2720,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2723,"mutability":"mutable","name":"b","nameLocation":"1469:1:16","nodeType":"VariableDeclaration","scope":2735,"src":"1461:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2722,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:16"},"returnParameters":{"id":2725,"nodeType":"ParameterList","parameters":[],"src":"1486:0:16"},"scope":3002,"src":"1418:149:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2756,"nodeType":"Block","src":"1652:91:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2744,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2737,"src":"1666:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2745,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2739,"src":"1671:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2747,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2739,"src":"1676:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2748,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2741,"src":"1681:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2755,"nodeType":"IfStatement","src":"1662:75:16","trueBody":{"id":2754,"nodeType":"Block","src":"1684:53:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2751,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2710,"src":"1705:19:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2753,"nodeType":"RevertStatement","src":"1698:28:16"}]}}]},"id":2757,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:16","nodeType":"FunctionDefinition","parameters":{"id":2742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2737,"mutability":"mutable","name":"a","nameLocation":"1613:1:16","nodeType":"VariableDeclaration","scope":2757,"src":"1605:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2736,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2739,"mutability":"mutable","name":"b","nameLocation":"1624:1:16","nodeType":"VariableDeclaration","scope":2757,"src":"1616:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2738,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2741,"mutability":"mutable","name":"c","nameLocation":"1635:1:16","nodeType":"VariableDeclaration","scope":2757,"src":"1627:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2740,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:16"},"returnParameters":{"id":2743,"nodeType":"ParameterList","parameters":[],"src":"1652:0:16"},"scope":3002,"src":"1573:170:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2815,"nodeType":"Block","src":"1938:451:16","statements":[{"assignments":[2766],"declarations":[{"constant":false,"id":2766,"mutability":"mutable","name":"length","nameLocation":"1956:6:16","nodeType":"VariableDeclaration","scope":2815,"src":"1948:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2765,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2769,"initialValue":{"expression":{"id":2767,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2760,"src":"1965:12:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:16","memberName":"length","nodeType":"MemberAccess","src":"1965:19:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:16"},{"expression":{"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2770,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"1994:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2771,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"2007:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2773,"nodeType":"ExpressionStatement","src":"1994:19:16"},{"body":{"id":2803,"nodeType":"Block","src":"2061:211:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2784,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2760,"src":"2079:12:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2786,"indexExpression":{"id":2785,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2775,"src":"2092:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2802,"nodeType":"IfStatement","src":"2075:187:16","trueBody":{"id":2801,"nodeType":"Block","src":"2101:161:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2789,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"2123:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2790,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"2137:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2796,"nodeType":"IfStatement","src":"2119:97:16","trueBody":{"id":2795,"nodeType":"Block","src":"2145:71:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2792,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2713,"src":"2174:21:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2794,"nodeType":"RevertStatement","src":"2167:30:16"}]}},{"expression":{"id":2799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2797,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"2233:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2798,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2775,"src":"2246:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2800,"nodeType":"ExpressionStatement","src":"2233:14:16"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2778,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2775,"src":"2044:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2779,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"2048:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2804,"initializationExpression":{"assignments":[2775],"declarations":[{"constant":false,"id":2775,"mutability":"mutable","name":"i","nameLocation":"2037:1:16","nodeType":"VariableDeclaration","scope":2804,"src":"2029:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2774,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2777,"initialValue":{"hexValue":"30","id":2776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:16"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:16","subExpression":{"id":2781,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2775,"src":"2058:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2783,"nodeType":"ExpressionStatement","src":"2056:3:16"},"nodeType":"ForStatement","src":"2024:248:16"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2805,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"2286:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2806,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2766,"src":"2300:6:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2812,"nodeType":"IfStatement","src":"2282:73:16","trueBody":{"id":2811,"nodeType":"Block","src":"2308:47:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2808,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2716,"src":"2329:13:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2810,"nodeType":"RevertStatement","src":"2322:22:16"}]}},{"expression":{"id":2813,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2763,"src":"2372:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2764,"id":2814,"nodeType":"Return","src":"2365:17:16"}]},"id":2816,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:16","nodeType":"FunctionDefinition","parameters":{"id":2761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2760,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:16","nodeType":"VariableDeclaration","scope":2816,"src":"1864:29:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2758,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2759,"nodeType":"ArrayTypeName","src":"1864:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:16"},"returnParameters":{"id":2764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2763,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:16","nodeType":"VariableDeclaration","scope":2816,"src":"1918:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2762,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:16"},"scope":3002,"src":"1835:554:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2893,"nodeType":"Block","src":"3138:376:16","statements":[{"body":{"id":2889,"nodeType":"Block","src":"3196:288:16","statements":[{"body":{"id":2887,"nodeType":"Block","src":"3262:212:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"id":2864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":2856,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3284:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2858,"indexExpression":{"id":2857,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3291:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":2859,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3296:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2863,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2860,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3303:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"src":"3284:25:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2886,"nodeType":"IfStatement","src":"3280:180:16","trueBody":{"id":2885,"nodeType":"Block","src":"3311:149:16","statements":[{"expression":{"id":2883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":2865,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3387:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2867,"indexExpression":{"id":2866,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3394:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"baseExpression":{"id":2868,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3398:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2872,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2869,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3405:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"id":2873,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:16","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$7165_$_t_contract$_IERC20_$7165_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":2874,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3416:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2878,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2875,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3423:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"baseExpression":{"id":2879,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3431:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2881,"indexExpression":{"id":2880,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3438:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"id":2882,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:16","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$7165_$_t_contract$_IERC20_$7165_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:16","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2884,"nodeType":"ExpressionStatement","src":"3386:55:16"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2845,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3230:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2846,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3234:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:16","memberName":"length","nodeType":"MemberAccess","src":"3234:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2848,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"3250:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2888,"initializationExpression":{"assignments":[2842],"declarations":[{"constant":false,"id":2842,"mutability":"mutable","name":"j","nameLocation":"3223:1:16","nodeType":"VariableDeclaration","scope":2888,"src":"3215:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2841,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2844,"initialValue":{"hexValue":"30","id":2843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:16"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:16","subExpression":{"id":2853,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2842,"src":"3259:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2855,"nodeType":"ExpressionStatement","src":"3257:3:16"},"nodeType":"ForStatement","src":"3210:264:16"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2832,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"3168:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2833,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3172:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:16","memberName":"length","nodeType":"MemberAccess","src":"3172:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":2835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2890,"initializationExpression":{"assignments":[2829],"declarations":[{"constant":false,"id":2829,"mutability":"mutable","name":"i","nameLocation":"3161:1:16","nodeType":"VariableDeclaration","scope":2890,"src":"3153:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2828,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2831,"initialValue":{"hexValue":"30","id":2830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:16"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:16","subExpression":{"id":2838,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"3193:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2840,"nodeType":"ExpressionStatement","src":"3191:3:16"},"nodeType":"ForStatement","src":"3148:336:16"},{"expression":{"id":2891,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"3501:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":2827,"id":2892,"nodeType":"Return","src":"3494:13:16"}]},"documentation":{"id":2817,"nodeType":"StructuredDocumentation","src":"2395:654:16","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":2894,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:16","nodeType":"FunctionDefinition","parameters":{"id":2822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2821,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:16","nodeType":"VariableDeclaration","scope":2894,"src":"3074:22:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2819,"nodeType":"UserDefinedTypeName","pathNode":{"id":2818,"name":"IERC20","nameLocations":["3074:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3074:6:16"},"referencedDeclaration":7165,"src":"3074:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":2820,"nodeType":"ArrayTypeName","src":"3074:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:16"},"returnParameters":{"id":2827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2826,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2894,"src":"3121:15:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2824,"nodeType":"UserDefinedTypeName","pathNode":{"id":2823,"name":"IERC20","nameLocations":["3121:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3121:6:16"},"referencedDeclaration":7165,"src":"3121:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":2825,"nodeType":"ArrayTypeName","src":"3121:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:16"},"scope":3002,"src":"3054:460:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2948,"nodeType":"Block","src":"3686:341:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2902,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2899,"src":"3700:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:16","memberName":"length","nodeType":"MemberAccess","src":"3700:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":2904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2908,"nodeType":"IfStatement","src":"3696:54:16","trueBody":{"id":2907,"nodeType":"Block","src":"3719:31:16","statements":[{"functionReturnParameters":2901,"id":2906,"nodeType":"Return","src":"3733:7:16"}]}},{"assignments":[2911],"declarations":[{"constant":false,"id":2911,"mutability":"mutable","name":"previous","nameLocation":"3767:8:16","nodeType":"VariableDeclaration","scope":2948,"src":"3760:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2910,"nodeType":"UserDefinedTypeName","pathNode":{"id":2909,"name":"IERC20","nameLocations":["3760:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3760:6:16"},"referencedDeclaration":7165,"src":"3760:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"id":2915,"initialValue":{"baseExpression":{"id":2912,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2899,"src":"3778:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2914,"indexExpression":{"hexValue":"30","id":2913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:16"},{"body":{"id":2946,"nodeType":"Block","src":"3842:179:16","statements":[{"assignments":[2929],"declarations":[{"constant":false,"id":2929,"mutability":"mutable","name":"current","nameLocation":"3863:7:16","nodeType":"VariableDeclaration","scope":2946,"src":"3856:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":2928,"nodeType":"UserDefinedTypeName","pathNode":{"id":2927,"name":"IERC20","nameLocations":["3856:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3856:6:16"},"referencedDeclaration":7165,"src":"3856:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"id":2933,"initialValue":{"baseExpression":{"id":2930,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2899,"src":"3873:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2932,"indexExpression":{"id":2931,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2917,"src":"3880:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:16"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"id":2936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2934,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2911,"src":"3901:8:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2935,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2929,"src":"3912:7:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"src":"3901:18:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2941,"nodeType":"IfStatement","src":"3897:81:16","trueBody":{"id":2940,"nodeType":"Block","src":"3921:57:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2937,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2719,"src":"3946:15:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2939,"nodeType":"RevertStatement","src":"3939:24:16"}]}},{"expression":{"id":2944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2942,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2911,"src":"3992:8:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2943,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2929,"src":"4003:7:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"src":"3992:18:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":2945,"nodeType":"ExpressionStatement","src":"3992:18:16"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2920,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2917,"src":"3818:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2921,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2899,"src":"3822:6:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":2922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:16","memberName":"length","nodeType":"MemberAccess","src":"3822:13:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2947,"initializationExpression":{"assignments":[2917],"declarations":[{"constant":false,"id":2917,"mutability":"mutable","name":"i","nameLocation":"3811:1:16","nodeType":"VariableDeclaration","scope":2947,"src":"3803:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2916,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2919,"initialValue":{"hexValue":"31","id":2918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:16"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:16","subExpression":{"id":2924,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2917,"src":"3839:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2926,"nodeType":"ExpressionStatement","src":"3837:3:16"},"nodeType":"ForStatement","src":"3798:223:16"}]},"documentation":{"id":2895,"nodeType":"StructuredDocumentation","src":"3520:95:16","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":2949,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:16","nodeType":"FunctionDefinition","parameters":{"id":2900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2899,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:16","nodeType":"VariableDeclaration","scope":2949,"src":"3648:22:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2897,"nodeType":"UserDefinedTypeName","pathNode":{"id":2896,"name":"IERC20","nameLocations":["3648:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3648:6:16"},"referencedDeclaration":7165,"src":"3648:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":2898,"nodeType":"ArrayTypeName","src":"3648:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:16"},"returnParameters":{"id":2901,"nodeType":"ParameterList","parameters":[],"src":"3686:0:16"},"scope":3002,"src":"3620:407:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3000,"nodeType":"Block","src":"4203:347:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2956,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"4217:7:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:16","memberName":"length","nodeType":"MemberAccess","src":"4217:14:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":2958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2962,"nodeType":"IfStatement","src":"4213:55:16","trueBody":{"id":2961,"nodeType":"Block","src":"4237:31:16","statements":[{"functionReturnParameters":2955,"id":2960,"nodeType":"Return","src":"4251:7:16"}]}},{"assignments":[2964],"declarations":[{"constant":false,"id":2964,"mutability":"mutable","name":"previous","nameLocation":"4286:8:16","nodeType":"VariableDeclaration","scope":3000,"src":"4278:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2963,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2968,"initialValue":{"baseExpression":{"id":2965,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"4297:7:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2967,"indexExpression":{"hexValue":"30","id":2966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:16"},{"body":{"id":2998,"nodeType":"Block","src":"4363:181:16","statements":[{"assignments":[2981],"declarations":[{"constant":false,"id":2981,"mutability":"mutable","name":"current","nameLocation":"4385:7:16","nodeType":"VariableDeclaration","scope":2998,"src":"4377:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2980,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2985,"initialValue":{"baseExpression":{"id":2982,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"4395:7:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2984,"indexExpression":{"id":2983,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2970,"src":"4403:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:16"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2986,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2964,"src":"4424:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2987,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2981,"src":"4435:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2993,"nodeType":"IfStatement","src":"4420:81:16","trueBody":{"id":2992,"nodeType":"Block","src":"4444:57:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2989,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2719,"src":"4469:15:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2991,"nodeType":"RevertStatement","src":"4462:24:16"}]}},{"expression":{"id":2996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2994,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2964,"src":"4515:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2995,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2981,"src":"4526:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2997,"nodeType":"ExpressionStatement","src":"4515:18:16"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2973,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2970,"src":"4338:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":2974,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"4342:7:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":2975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:16","memberName":"length","nodeType":"MemberAccess","src":"4342:14:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2999,"initializationExpression":{"assignments":[2970],"declarations":[{"constant":false,"id":2970,"mutability":"mutable","name":"i","nameLocation":"4331:1:16","nodeType":"VariableDeclaration","scope":2999,"src":"4323:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2969,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2972,"initialValue":{"hexValue":"31","id":2971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:16"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:16","subExpression":{"id":2977,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2970,"src":"4360:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2979,"nodeType":"ExpressionStatement","src":"4358:3:16"},"nodeType":"ForStatement","src":"4318:226:16"}]},"documentation":{"id":2950,"nodeType":"StructuredDocumentation","src":"4033:96:16","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":3001,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:16","nodeType":"FunctionDefinition","parameters":{"id":2954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2953,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:16","nodeType":"VariableDeclaration","scope":3001,"src":"4163:24:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2951,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2952,"nodeType":"ArrayTypeName","src":"4163:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:16"},"returnParameters":{"id":2955,"nodeType":"ParameterList","parameters":[],"src":"4203:0:16"},"scope":3002,"src":"4134:416:16","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3003,"src":"202:4350:16","usedErrors":[2710,2713,2716,2719],"usedEvents":[]}],"src":"46:4507:16"},"id":16},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[3301],"LogExpMath":[4657]},"id":3302,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3004,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:17"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":3006,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3302,"sourceUnit":4658,"src":"72:46:17","symbolAliases":[{"foreign":{"id":3005,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4657,"src":"81:10:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":3007,"nodeType":"StructuredDocumentation","src":"120:119:17","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":3301,"linearizedBaseContracts":[3301],"name":"FixedPoint","nameLocation":"247:10:17","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3008,"nodeType":"StructuredDocumentation","src":"264:39:17","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":3010,"name":"ZeroDivision","nameLocation":"314:12:17","nodeType":"ErrorDefinition","parameters":{"id":3009,"nodeType":"ParameterList","parameters":[],"src":"326:2:17"},"src":"308:21:17"},{"constant":true,"id":3013,"mutability":"constant","name":"ONE","nameLocation":"459:3:17","nodeType":"VariableDeclaration","scope":3301,"src":"433:36:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3011,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":3012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:17","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":3018,"mutability":"constant","name":"TWO","nameLocation":"522:3:17","nodeType":"VariableDeclaration","scope":3301,"src":"496:39:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3014,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3017,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:17","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3016,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3013,"src":"532:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":3023,"mutability":"constant","name":"FOUR","nameLocation":"567:4:17","nodeType":"VariableDeclaration","scope":3301,"src":"541:40:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3019,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3022,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":3020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:17","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3021,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3013,"src":"578:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":3026,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:17","nodeType":"VariableDeclaration","scope":3301,"src":"587:56:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3024,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":3025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:17","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":3045,"nodeType":"Block","src":"733:148:17","statements":[{"assignments":[3036],"declarations":[{"constant":false,"id":3036,"mutability":"mutable","name":"product","nameLocation":"828:7:17","nodeType":"VariableDeclaration","scope":3045,"src":"820:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3035,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3040,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3037,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3028,"src":"838:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3038,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"842:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:17"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3041,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"861:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3042,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3013,"src":"871:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3034,"id":3044,"nodeType":"Return","src":"854:20:17"}]},"id":3046,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:17","nodeType":"FunctionDefinition","parameters":{"id":3031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3028,"mutability":"mutable","name":"a","nameLocation":"687:1:17","nodeType":"VariableDeclaration","scope":3046,"src":"679:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3027,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3030,"mutability":"mutable","name":"b","nameLocation":"698:1:17","nodeType":"VariableDeclaration","scope":3046,"src":"690:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3029,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:17"},"returnParameters":{"id":3034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3033,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3046,"src":"724:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3032,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:17"},"scope":3301,"src":"662:219:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3062,"nodeType":"Block","src":"963:351:17","statements":[{"assignments":[3056],"declarations":[{"constant":false,"id":3056,"mutability":"mutable","name":"product","nameLocation":"1058:7:17","nodeType":"VariableDeclaration","scope":3062,"src":"1050:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3055,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3060,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3057,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3048,"src":"1068:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3058,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3050,"src":"1072:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:17"},{"AST":{"nativeSrc":"1211:97:17","nodeType":"YulBlock","src":"1211:97:17","statements":[{"nativeSrc":"1225:73:17","nodeType":"YulAssignment","src":"1225:73:17","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:17","nodeType":"YulIdentifier","src":"1253:7:17"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:17","nodeType":"YulIdentifier","src":"1246:6:17"},"nativeSrc":"1246:15:17","nodeType":"YulFunctionCall","src":"1246:15:17"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:17","nodeType":"YulIdentifier","src":"1239:6:17"},"nativeSrc":"1239:23:17","nodeType":"YulFunctionCall","src":"1239:23:17"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:17","nodeType":"YulIdentifier","src":"1276:7:17"},{"kind":"number","nativeSrc":"1285:1:17","nodeType":"YulLiteral","src":"1285:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:17","nodeType":"YulIdentifier","src":"1272:3:17"},"nativeSrc":"1272:15:17","nodeType":"YulFunctionCall","src":"1272:15:17"},{"name":"ONE","nativeSrc":"1289:3:17","nodeType":"YulIdentifier","src":"1289:3:17"}],"functionName":{"name":"div","nativeSrc":"1268:3:17","nodeType":"YulIdentifier","src":"1268:3:17"},"nativeSrc":"1268:25:17","nodeType":"YulFunctionCall","src":"1268:25:17"},{"kind":"number","nativeSrc":"1295:1:17","nodeType":"YulLiteral","src":"1295:1:17","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:17","nodeType":"YulIdentifier","src":"1264:3:17"},"nativeSrc":"1264:33:17","nodeType":"YulFunctionCall","src":"1264:33:17"}],"functionName":{"name":"mul","nativeSrc":"1235:3:17","nodeType":"YulIdentifier","src":"1235:3:17"},"nativeSrc":"1235:63:17","nodeType":"YulFunctionCall","src":"1235:63:17"},"variableNames":[{"name":"result","nativeSrc":"1225:6:17","nodeType":"YulIdentifier","src":"1225:6:17"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":3013,"isOffset":false,"isSlot":false,"src":"1289:3:17","valueSize":1},{"declaration":3056,"isOffset":false,"isSlot":false,"src":"1253:7:17","valueSize":1},{"declaration":3056,"isOffset":false,"isSlot":false,"src":"1276:7:17","valueSize":1},{"declaration":3053,"isOffset":false,"isSlot":false,"src":"1225:6:17","valueSize":1}],"flags":["memory-safe"],"id":3061,"nodeType":"InlineAssembly","src":"1186:122:17"}]},"id":3063,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:17","nodeType":"FunctionDefinition","parameters":{"id":3051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3048,"mutability":"mutable","name":"a","nameLocation":"910:1:17","nodeType":"VariableDeclaration","scope":3063,"src":"902:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3047,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3050,"mutability":"mutable","name":"b","nameLocation":"921:1:17","nodeType":"VariableDeclaration","scope":3063,"src":"913:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3049,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:17"},"returnParameters":{"id":3054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3053,"mutability":"mutable","name":"result","nameLocation":"955:6:17","nodeType":"VariableDeclaration","scope":3063,"src":"947:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3052,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:17"},"scope":3301,"src":"887:427:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3082,"nodeType":"Block","src":"1391:254:17","statements":[{"assignments":[3073],"declarations":[{"constant":false,"id":3073,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:17","nodeType":"VariableDeclaration","scope":3082,"src":"1491:17:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3072,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3077,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3074,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"1511:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3075,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3013,"src":"1515:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:17"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3078,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3073,"src":"1625:9:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3079,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3067,"src":"1637:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3071,"id":3081,"nodeType":"Return","src":"1618:20:17"}]},"id":3083,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:17","nodeType":"FunctionDefinition","parameters":{"id":3068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3065,"mutability":"mutable","name":"a","nameLocation":"1345:1:17","nodeType":"VariableDeclaration","scope":3083,"src":"1337:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3064,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3067,"mutability":"mutable","name":"b","nameLocation":"1356:1:17","nodeType":"VariableDeclaration","scope":3083,"src":"1348:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3066,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:17"},"returnParameters":{"id":3071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3083,"src":"1382:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:17"},"scope":3301,"src":"1320:325:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3098,"nodeType":"Block","src":"1727:43:17","statements":[{"expression":{"arguments":[{"id":3093,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3085,"src":"1753:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3094,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3013,"src":"1756:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3095,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3087,"src":"1761:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3092,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3127,"src":"1744:8:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":3096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3091,"id":3097,"nodeType":"Return","src":"1737:26:17"}]},"id":3099,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:17","nodeType":"FunctionDefinition","parameters":{"id":3088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3085,"mutability":"mutable","name":"a","nameLocation":"1674:1:17","nodeType":"VariableDeclaration","scope":3099,"src":"1666:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3084,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3087,"mutability":"mutable","name":"b","nameLocation":"1685:1:17","nodeType":"VariableDeclaration","scope":3099,"src":"1677:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3086,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:17"},"returnParameters":{"id":3091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3090,"mutability":"mutable","name":"result","nameLocation":"1719:6:17","nodeType":"VariableDeclaration","scope":3099,"src":"1711:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3089,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:17"},"scope":3301,"src":"1651:119:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3126,"nodeType":"Block","src":"1912:774:17","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3111,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3106,"src":"2004:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:17","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3118,"nodeType":"IfStatement","src":"2000:58:17","trueBody":{"id":3117,"nodeType":"Block","src":"2012:46:17","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3114,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3010,"src":"2033:12:17","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3116,"nodeType":"RevertStatement","src":"2026:21:17"}]}},{"assignments":[3120],"declarations":[{"constant":false,"id":3120,"mutability":"mutable","name":"product","nameLocation":"2143:7:17","nodeType":"VariableDeclaration","scope":3126,"src":"2135:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3119,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3124,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3121,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3102,"src":"2153:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3122,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3104,"src":"2157:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:17"},{"AST":{"nativeSrc":"2585:95:17","nodeType":"YulBlock","src":"2585:95:17","statements":[{"nativeSrc":"2599:71:17","nodeType":"YulAssignment","src":"2599:71:17","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:17","nodeType":"YulIdentifier","src":"2627:7:17"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:17","nodeType":"YulIdentifier","src":"2620:6:17"},"nativeSrc":"2620:15:17","nodeType":"YulFunctionCall","src":"2620:15:17"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:17","nodeType":"YulIdentifier","src":"2613:6:17"},"nativeSrc":"2613:23:17","nodeType":"YulFunctionCall","src":"2613:23:17"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:17","nodeType":"YulIdentifier","src":"2650:7:17"},{"kind":"number","nativeSrc":"2659:1:17","nodeType":"YulLiteral","src":"2659:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:17","nodeType":"YulIdentifier","src":"2646:3:17"},"nativeSrc":"2646:15:17","nodeType":"YulFunctionCall","src":"2646:15:17"},{"name":"c","nativeSrc":"2663:1:17","nodeType":"YulIdentifier","src":"2663:1:17"}],"functionName":{"name":"div","nativeSrc":"2642:3:17","nodeType":"YulIdentifier","src":"2642:3:17"},"nativeSrc":"2642:23:17","nodeType":"YulFunctionCall","src":"2642:23:17"},{"kind":"number","nativeSrc":"2667:1:17","nodeType":"YulLiteral","src":"2667:1:17","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:17","nodeType":"YulIdentifier","src":"2638:3:17"},"nativeSrc":"2638:31:17","nodeType":"YulFunctionCall","src":"2638:31:17"}],"functionName":{"name":"mul","nativeSrc":"2609:3:17","nodeType":"YulIdentifier","src":"2609:3:17"},"nativeSrc":"2609:61:17","nodeType":"YulFunctionCall","src":"2609:61:17"},"variableNames":[{"name":"result","nativeSrc":"2599:6:17","nodeType":"YulIdentifier","src":"2599:6:17"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":3106,"isOffset":false,"isSlot":false,"src":"2663:1:17","valueSize":1},{"declaration":3120,"isOffset":false,"isSlot":false,"src":"2627:7:17","valueSize":1},{"declaration":3120,"isOffset":false,"isSlot":false,"src":"2650:7:17","valueSize":1},{"declaration":3109,"isOffset":false,"isSlot":false,"src":"2599:6:17","valueSize":1}],"flags":["memory-safe"],"id":3125,"nodeType":"InlineAssembly","src":"2560:120:17"}]},"documentation":{"id":3100,"nodeType":"StructuredDocumentation","src":"1776:41:17","text":"@dev Return (a * b) / c, rounding up."},"id":3127,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:17","nodeType":"FunctionDefinition","parameters":{"id":3107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3102,"mutability":"mutable","name":"a","nameLocation":"1848:1:17","nodeType":"VariableDeclaration","scope":3127,"src":"1840:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3101,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3104,"mutability":"mutable","name":"b","nameLocation":"1859:1:17","nodeType":"VariableDeclaration","scope":3127,"src":"1851:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3103,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3106,"mutability":"mutable","name":"c","nameLocation":"1870:1:17","nodeType":"VariableDeclaration","scope":3127,"src":"1862:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3105,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:17"},"returnParameters":{"id":3110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3109,"mutability":"mutable","name":"result","nameLocation":"1904:6:17","nodeType":"VariableDeclaration","scope":3127,"src":"1896:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3108,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:17"},"scope":3301,"src":"1822:864:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3146,"nodeType":"Block","src":"3159:345:17","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3137,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3132,"src":"3251:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:17","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3144,"nodeType":"IfStatement","src":"3247:58:17","trueBody":{"id":3143,"nodeType":"Block","src":"3259:46:17","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3140,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3010,"src":"3280:12:17","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3142,"nodeType":"RevertStatement","src":"3273:21:17"}]}},{"AST":{"nativeSrc":"3415:83:17","nodeType":"YulBlock","src":"3415:83:17","statements":[{"nativeSrc":"3429:59:17","nodeType":"YulAssignment","src":"3429:59:17","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:17","nodeType":"YulIdentifier","src":"3457:1:17"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:17","nodeType":"YulIdentifier","src":"3450:6:17"},"nativeSrc":"3450:9:17","nodeType":"YulFunctionCall","src":"3450:9:17"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:17","nodeType":"YulIdentifier","src":"3443:6:17"},"nativeSrc":"3443:17:17","nodeType":"YulFunctionCall","src":"3443:17:17"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:17","nodeType":"YulLiteral","src":"3466:1:17","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:17","nodeType":"YulIdentifier","src":"3477:1:17"},{"kind":"number","nativeSrc":"3480:1:17","nodeType":"YulLiteral","src":"3480:1:17","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:17","nodeType":"YulIdentifier","src":"3473:3:17"},"nativeSrc":"3473:9:17","nodeType":"YulFunctionCall","src":"3473:9:17"},{"name":"b","nativeSrc":"3484:1:17","nodeType":"YulIdentifier","src":"3484:1:17"}],"functionName":{"name":"div","nativeSrc":"3469:3:17","nodeType":"YulIdentifier","src":"3469:3:17"},"nativeSrc":"3469:17:17","nodeType":"YulFunctionCall","src":"3469:17:17"}],"functionName":{"name":"add","nativeSrc":"3462:3:17","nodeType":"YulIdentifier","src":"3462:3:17"},"nativeSrc":"3462:25:17","nodeType":"YulFunctionCall","src":"3462:25:17"}],"functionName":{"name":"mul","nativeSrc":"3439:3:17","nodeType":"YulIdentifier","src":"3439:3:17"},"nativeSrc":"3439:49:17","nodeType":"YulFunctionCall","src":"3439:49:17"},"variableNames":[{"name":"result","nativeSrc":"3429:6:17","nodeType":"YulIdentifier","src":"3429:6:17"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":3130,"isOffset":false,"isSlot":false,"src":"3457:1:17","valueSize":1},{"declaration":3130,"isOffset":false,"isSlot":false,"src":"3477:1:17","valueSize":1},{"declaration":3132,"isOffset":false,"isSlot":false,"src":"3484:1:17","valueSize":1},{"declaration":3135,"isOffset":false,"isSlot":false,"src":"3429:6:17","valueSize":1}],"flags":["memory-safe"],"id":3145,"nodeType":"InlineAssembly","src":"3390:108:17"}]},"documentation":{"id":3128,"nodeType":"StructuredDocumentation","src":"2692:383:17","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":3147,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:17","nodeType":"FunctionDefinition","parameters":{"id":3133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3130,"mutability":"mutable","name":"a","nameLocation":"3106:1:17","nodeType":"VariableDeclaration","scope":3147,"src":"3098:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3129,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3132,"mutability":"mutable","name":"b","nameLocation":"3117:1:17","nodeType":"VariableDeclaration","scope":3147,"src":"3109:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3131,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:17"},"returnParameters":{"id":3136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3135,"mutability":"mutable","name":"result","nameLocation":"3151:6:17","nodeType":"VariableDeclaration","scope":3147,"src":"3143:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3134,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:17"},"scope":3301,"src":"3080:424:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3222,"nodeType":"Block","src":"3807:723:17","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3157,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"3975:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3158,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3013,"src":"3980:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3163,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"4028:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3164,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"4033:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3172,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"4093:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3173,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3023,"src":"4098:4:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3218,"nodeType":"Block","src":"4209:315:17","statements":[{"assignments":[3189],"declarations":[{"constant":false,"id":3189,"mutability":"mutable","name":"raw","nameLocation":"4231:3:17","nodeType":"VariableDeclaration","scope":3218,"src":"4223:11:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3188,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3195,"initialValue":{"arguments":[{"id":3192,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"4252:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3193,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"4255:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3190,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4657,"src":"4237:10:17","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$4657_$","typeString":"type(library LogExpMath)"}},"id":3191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:17","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":3560,"src":"4237:14:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:17"},{"assignments":[3197],"declarations":[{"constant":false,"id":3197,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:17","nodeType":"VariableDeclaration","scope":3218,"src":"4271:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3196,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3204,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3199,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3189,"src":"4296:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3200,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3026,"src":"4301:22:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3198,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"4290:5:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:17","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:17"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3205,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3189,"src":"4347:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3206,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3197,"src":"4353:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3216,"nodeType":"Block","src":"4410:104:17","statements":[{"id":3215,"nodeType":"UncheckedBlock","src":"4428:72:17","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3211,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3189,"src":"4467:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3212,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3197,"src":"4473:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3156,"id":3214,"nodeType":"Return","src":"4460:21:17"}]}]},"id":3217,"nodeType":"IfStatement","src":"4343:171:17","trueBody":{"id":3210,"nodeType":"Block","src":"4363:41:17","statements":[{"expression":{"hexValue":"30","id":3208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:17","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":3156,"id":3209,"nodeType":"Return","src":"4381:8:17"}]}}]},"id":3219,"nodeType":"IfStatement","src":"4089:435:17","trueBody":{"id":3187,"nodeType":"Block","src":"4104:99:17","statements":[{"assignments":[3176],"declarations":[{"constant":false,"id":3176,"mutability":"mutable","name":"square","nameLocation":"4126:6:17","nodeType":"VariableDeclaration","scope":3187,"src":"4118:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3175,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3181,"initialValue":{"arguments":[{"id":3178,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"4143:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3179,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"4146:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3177,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3046,"src":"4135:7:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:17"},{"expression":{"arguments":[{"id":3183,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3176,"src":"4177:6:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3184,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3176,"src":"4185:6:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3182,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3046,"src":"4169:7:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3156,"id":3186,"nodeType":"Return","src":"4162:30:17"}]}},"id":3220,"nodeType":"IfStatement","src":"4024:500:17","trueBody":{"id":3171,"nodeType":"Block","src":"4038:45:17","statements":[{"expression":{"arguments":[{"id":3167,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"4067:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3168,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"4070:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3166,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3046,"src":"4059:7:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3156,"id":3170,"nodeType":"Return","src":"4052:20:17"}]}},"id":3221,"nodeType":"IfStatement","src":"3971:553:17","trueBody":{"id":3162,"nodeType":"Block","src":"3985:33:17","statements":[{"expression":{"id":3160,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"4006:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3156,"id":3161,"nodeType":"Return","src":"3999:8:17"}]}}]},"documentation":{"id":3148,"nodeType":"StructuredDocumentation","src":"3510:221:17","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":3223,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:17","nodeType":"FunctionDefinition","parameters":{"id":3153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3150,"mutability":"mutable","name":"x","nameLocation":"3761:1:17","nodeType":"VariableDeclaration","scope":3223,"src":"3753:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3149,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3152,"mutability":"mutable","name":"y","nameLocation":"3772:1:17","nodeType":"VariableDeclaration","scope":3223,"src":"3764:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3151,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:17"},"returnParameters":{"id":3156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3155,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3223,"src":"3798:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3154,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:17"},"scope":3301,"src":"3736:794:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3289,"nodeType":"Block","src":"4829:568:17","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3233,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3228,"src":"4997:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3234,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3013,"src":"5002:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3239,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3228,"src":"5050:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3240,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"5055:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3248,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3228,"src":"5113:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3249,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3023,"src":"5118:4:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3285,"nodeType":"Block","src":"5225:166:17","statements":[{"assignments":[3265],"declarations":[{"constant":false,"id":3265,"mutability":"mutable","name":"raw","nameLocation":"5247:3:17","nodeType":"VariableDeclaration","scope":3285,"src":"5239:11:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3264,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3271,"initialValue":{"arguments":[{"id":3268,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"5268:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3269,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3228,"src":"5271:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3266,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4657,"src":"5253:10:17","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$4657_$","typeString":"type(library LogExpMath)"}},"id":3267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:17","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":3560,"src":"5253:14:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:17"},{"assignments":[3273],"declarations":[{"constant":false,"id":3273,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:17","nodeType":"VariableDeclaration","scope":3285,"src":"5287:16:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3272,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3280,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3275,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3265,"src":"5312:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3276,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3026,"src":"5317:22:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3274,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"5306:5:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:17","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:17"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3281,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3265,"src":"5366:3:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3282,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3273,"src":"5372:8:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3232,"id":3284,"nodeType":"Return","src":"5359:21:17"}]},"id":3286,"nodeType":"IfStatement","src":"5109:282:17","trueBody":{"id":3263,"nodeType":"Block","src":"5124:95:17","statements":[{"assignments":[3252],"declarations":[{"constant":false,"id":3252,"mutability":"mutable","name":"square","nameLocation":"5146:6:17","nodeType":"VariableDeclaration","scope":3263,"src":"5138:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3251,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3257,"initialValue":{"arguments":[{"id":3254,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"5161:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3255,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"5164:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3253,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"5155:5:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:17"},{"expression":{"arguments":[{"id":3259,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3252,"src":"5193:6:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3260,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3252,"src":"5201:6:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3258,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"5187:5:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3232,"id":3262,"nodeType":"Return","src":"5180:28:17"}]}},"id":3287,"nodeType":"IfStatement","src":"5046:345:17","trueBody":{"id":3247,"nodeType":"Block","src":"5060:43:17","statements":[{"expression":{"arguments":[{"id":3243,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"5087:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3244,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"5090:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3242,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"5081:5:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3232,"id":3246,"nodeType":"Return","src":"5074:18:17"}]}},"id":3288,"nodeType":"IfStatement","src":"4993:398:17","trueBody":{"id":3238,"nodeType":"Block","src":"5007:33:17","statements":[{"expression":{"id":3236,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3226,"src":"5028:1:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3232,"id":3237,"nodeType":"Return","src":"5021:8:17"}]}}]},"documentation":{"id":3224,"nodeType":"StructuredDocumentation","src":"4536:219:17","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":3290,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:17","nodeType":"FunctionDefinition","parameters":{"id":3229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3226,"mutability":"mutable","name":"x","nameLocation":"4783:1:17","nodeType":"VariableDeclaration","scope":3290,"src":"4775:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3225,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3228,"mutability":"mutable","name":"y","nameLocation":"4794:1:17","nodeType":"VariableDeclaration","scope":3290,"src":"4786:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3227,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:17"},"returnParameters":{"id":3232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3231,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3290,"src":"4820:7:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3230,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:17"},"scope":3301,"src":"4760:637:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3299,"nodeType":"Block","src":"5750:175:17","statements":[{"AST":{"nativeSrc":"5857:62:17","nodeType":"YulBlock","src":"5857:62:17","statements":[{"nativeSrc":"5871:38:17","nodeType":"YulAssignment","src":"5871:38:17","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:17","nodeType":"YulIdentifier","src":"5888:1:17"},{"name":"ONE","nativeSrc":"5891:3:17","nodeType":"YulIdentifier","src":"5891:3:17"}],"functionName":{"name":"lt","nativeSrc":"5885:2:17","nodeType":"YulIdentifier","src":"5885:2:17"},"nativeSrc":"5885:10:17","nodeType":"YulFunctionCall","src":"5885:10:17"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:17","nodeType":"YulIdentifier","src":"5901:3:17"},{"name":"x","nativeSrc":"5906:1:17","nodeType":"YulIdentifier","src":"5906:1:17"}],"functionName":{"name":"sub","nativeSrc":"5897:3:17","nodeType":"YulIdentifier","src":"5897:3:17"},"nativeSrc":"5897:11:17","nodeType":"YulFunctionCall","src":"5897:11:17"}],"functionName":{"name":"mul","nativeSrc":"5881:3:17","nodeType":"YulIdentifier","src":"5881:3:17"},"nativeSrc":"5881:28:17","nodeType":"YulFunctionCall","src":"5881:28:17"},"variableNames":[{"name":"result","nativeSrc":"5871:6:17","nodeType":"YulIdentifier","src":"5871:6:17"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":3013,"isOffset":false,"isSlot":false,"src":"5891:3:17","valueSize":1},{"declaration":3013,"isOffset":false,"isSlot":false,"src":"5901:3:17","valueSize":1},{"declaration":3296,"isOffset":false,"isSlot":false,"src":"5871:6:17","valueSize":1},{"declaration":3293,"isOffset":false,"isSlot":false,"src":"5888:1:17","valueSize":1},{"declaration":3293,"isOffset":false,"isSlot":false,"src":"5906:1:17","valueSize":1}],"flags":["memory-safe"],"id":3298,"nodeType":"InlineAssembly","src":"5832:87:17"}]},"documentation":{"id":3291,"nodeType":"StructuredDocumentation","src":"5403:272:17","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":3300,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:17","nodeType":"FunctionDefinition","parameters":{"id":3294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3293,"mutability":"mutable","name":"x","nameLocation":"5708:1:17","nodeType":"VariableDeclaration","scope":3300,"src":"5700:9:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3292,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:17"},"returnParameters":{"id":3297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3296,"mutability":"mutable","name":"result","nameLocation":"5742:6:17","nodeType":"VariableDeclaration","scope":3300,"src":"5734:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3295,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:17"},"scope":3301,"src":"5680:245:17","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3302,"src":"239:5688:17","usedErrors":[3010],"usedEvents":[]}],"src":"46:5882:17"},"id":17},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[4657]},"id":4658,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":3303,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:18"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":3304,"nodeType":"StructuredDocumentation","src":"79:515:18","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":4657,"linearizedBaseContracts":[4657],"name":"LogExpMath","nameLocation":"603:10:18","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3305,"nodeType":"StructuredDocumentation","src":"620:79:18","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":3307,"name":"BaseOutOfBounds","nameLocation":"710:15:18","nodeType":"ErrorDefinition","parameters":{"id":3306,"nodeType":"ParameterList","parameters":[],"src":"725:2:18"},"src":"704:24:18"},{"documentation":{"id":3308,"nodeType":"StructuredDocumentation","src":"734:83:18","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":3310,"name":"ExponentOutOfBounds","nameLocation":"828:19:18","nodeType":"ErrorDefinition","parameters":{"id":3309,"nodeType":"ParameterList","parameters":[],"src":"847:2:18"},"src":"822:28:18"},{"documentation":{"id":3311,"nodeType":"StructuredDocumentation","src":"856:96:18","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":3313,"name":"ProductOutOfBounds","nameLocation":"963:18:18","nodeType":"ErrorDefinition","parameters":{"id":3312,"nodeType":"ParameterList","parameters":[],"src":"981:2:18"},"src":"957:27:18"},{"documentation":{"id":3314,"nodeType":"StructuredDocumentation","src":"990:109:18","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":3316,"name":"InvalidExponent","nameLocation":"1110:15:18","nodeType":"ErrorDefinition","parameters":{"id":3315,"nodeType":"ParameterList","parameters":[],"src":"1125:2:18"},"src":"1104:24:18"},{"documentation":{"id":3317,"nodeType":"StructuredDocumentation","src":"1134:119:18","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":3319,"name":"OutOfBounds","nameLocation":"1264:11:18","nodeType":"ErrorDefinition","parameters":{"id":3318,"nodeType":"ParameterList","parameters":[],"src":"1275:2:18"},"src":"1258:20:18"},{"constant":true,"id":3322,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:18","nodeType":"VariableDeclaration","scope":4657,"src":"1539:29:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3320,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":3321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:18","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":3325,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:18","nodeType":"VariableDeclaration","scope":4657,"src":"1729:29:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3323,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":3324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:18","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":3328,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:18","nodeType":"VariableDeclaration","scope":4657,"src":"1764:29:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3326,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":3327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:18","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":3331,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:18","nodeType":"VariableDeclaration","scope":4657,"src":"2310:45:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3329,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":3330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:18","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":3335,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:18","nodeType":"VariableDeclaration","scope":4657,"src":"2361:45:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3332,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":3334,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:18","subExpression":{"hexValue":"3431653138","id":3333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:18","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":3340,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:18","nodeType":"VariableDeclaration","scope":4657,"src":"2557:49:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3336,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3339,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3337,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"2593:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":3338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:18","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":3345,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:18","nodeType":"VariableDeclaration","scope":4657,"src":"2612:49:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3341,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3344,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3342,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"2648:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":3343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:18","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":3355,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:18","nodeType":"VariableDeclaration","scope":4657,"src":"2668:65:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3346,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3354,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":3349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":3347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:18","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":3348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:18","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:18","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":3352,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"2726:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3350,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:18","typeDescriptions":{}}},"id":3353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":3358,"mutability":"constant","name":"x0","nameLocation":"2784:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"2768:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3356,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":3357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:18","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":3361,"mutability":"constant","name":"a0","nameLocation":"2840:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"2824:77:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3359,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":3360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:18","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":3364,"mutability":"constant","name":"x1","nameLocation":"2948:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"2932:41:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3362,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":3363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:18","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":3367,"mutability":"constant","name":"a1","nameLocation":"3003:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"2987:49:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3365,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":3366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:18","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":3370,"mutability":"constant","name":"x2","nameLocation":"3112:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3096:43:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3368,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":3369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:18","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":3373,"mutability":"constant","name":"a2","nameLocation":"3169:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3153:55:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3371,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":3372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:18","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":3376,"mutability":"constant","name":"x3","nameLocation":"3241:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3225:43:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3374,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":3375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:18","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":3379,"mutability":"constant","name":"a3","nameLocation":"3298:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3282:48:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3377,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":3378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:18","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":3382,"mutability":"constant","name":"x4","nameLocation":"3363:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3347:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3380,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":3381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:18","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":3385,"mutability":"constant","name":"a4","nameLocation":"3419:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3403:45:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3383,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":3384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:18","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":3388,"mutability":"constant","name":"x5","nameLocation":"3481:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3465:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3386,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":3387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:18","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":3391,"mutability":"constant","name":"a5","nameLocation":"3537:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3521:43:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3389,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":3390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:18","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":3394,"mutability":"constant","name":"x6","nameLocation":"3597:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3581:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3392,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":3393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:18","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":3397,"mutability":"constant","name":"a6","nameLocation":"3653:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3637:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3395,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":3396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:18","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":3400,"mutability":"constant","name":"x7","nameLocation":"3712:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3696:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3398,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":3399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:18","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":3403,"mutability":"constant","name":"a7","nameLocation":"3768:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3752:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3401,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":3402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:18","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":3406,"mutability":"constant","name":"x8","nameLocation":"3827:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3811:41:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3404,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":3405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:18","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":3409,"mutability":"constant","name":"a8","nameLocation":"3883:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3867:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3407,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":3408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:18","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":3412,"mutability":"constant","name":"x9","nameLocation":"3942:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3926:41:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3410,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":3411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:18","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":3415,"mutability":"constant","name":"a9","nameLocation":"3998:2:18","nodeType":"VariableDeclaration","scope":4657,"src":"3982:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3413,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":3414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:18","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":3418,"mutability":"constant","name":"x10","nameLocation":"4057:3:18","nodeType":"VariableDeclaration","scope":4657,"src":"4041:42:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3416,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":3417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:18","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":3421,"mutability":"constant","name":"a10","nameLocation":"4114:3:18","nodeType":"VariableDeclaration","scope":4657,"src":"4098:43:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3419,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":3420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:18","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":3424,"mutability":"constant","name":"x11","nameLocation":"4175:3:18","nodeType":"VariableDeclaration","scope":4657,"src":"4159:41:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3422,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":3423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:18","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":3427,"mutability":"constant","name":"a11","nameLocation":"4231:3:18","nodeType":"VariableDeclaration","scope":4657,"src":"4215:43:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3425,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":3426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:18","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":3559,"nodeType":"Block","src":"4563:2233:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3437,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3432,"src":"4577:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3438,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3446,"nodeType":"IfStatement","src":"4573:131:18","trueBody":{"id":3445,"nodeType":"Block","src":"4585:119:18","statements":[{"expression":{"arguments":[{"id":3442,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"4686:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3440,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:18","typeDescriptions":{}}},"id":3443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3436,"id":3444,"nodeType":"Return","src":"4671:22:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3447,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3430,"src":"4718:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3453,"nodeType":"IfStatement","src":"4714:45:18","trueBody":{"id":3452,"nodeType":"Block","src":"4726:33:18","statements":[{"expression":{"hexValue":"30","id":3450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":3436,"id":3451,"nodeType":"Return","src":"4740:8:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3454,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3430,"src":"5133:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":3455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:18","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":3457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3463,"nodeType":"IfStatement","src":"5129:68:18","trueBody":{"id":3462,"nodeType":"Block","src":"5148:49:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3459,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3307,"src":"5169:15:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3461,"nodeType":"RevertStatement","src":"5162:24:18"}]}},{"assignments":[3465],"declarations":[{"constant":false,"id":3465,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:18","nodeType":"VariableDeclaration","scope":3559,"src":"5206:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3464,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3470,"initialValue":{"arguments":[{"id":3468,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3430,"src":"5231:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3467,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:18","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":3466,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:18","typeDescriptions":{}}},"id":3469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:18"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3471,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3432,"src":"5591:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3472,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3355,"src":"5596:19:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3478,"nodeType":"IfStatement","src":"5587:83:18","trueBody":{"id":3477,"nodeType":"Block","src":"5617:53:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3474,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3310,"src":"5638:19:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3476,"nodeType":"RevertStatement","src":"5631:28:18"}]}},{"assignments":[3480],"declarations":[{"constant":false,"id":3480,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:18","nodeType":"VariableDeclaration","scope":3559,"src":"5679:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3479,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3485,"initialValue":{"arguments":[{"id":3483,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3432,"src":"5704:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3482,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:18","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":3481,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:18","typeDescriptions":{}}},"id":3484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:18"},{"assignments":[3487],"declarations":[{"constant":false,"id":3487,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:18","nodeType":"VariableDeclaration","scope":3559,"src":"5717:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3486,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3488,"nodeType":"VariableDeclarationStatement","src":"5717:19:18"},{"id":3537,"nodeType":"UncheckedBlock","src":"5746:790:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3489,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3340,"src":"5774:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3490,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3465,"src":"5794:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3492,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3465,"src":"5806:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3493,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"5817:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3531,"nodeType":"Block","src":"6418:72:18","statements":[{"expression":{"id":3529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3523,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3487,"src":"6436:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3525,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3465,"src":"6455:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3524,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4501,"src":"6451:3:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3527,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"6467:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3530,"nodeType":"ExpressionStatement","src":"6436:39:18"}]},"id":3532,"nodeType":"IfStatement","src":"5770:720:18","trueBody":{"id":3522,"nodeType":"Block","src":"5836:576:18","statements":[{"assignments":[3497],"declarations":[{"constant":false,"id":3497,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:18","nodeType":"VariableDeclaration","scope":3522,"src":"5854:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3496,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3501,"initialValue":{"arguments":[{"id":3499,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3465,"src":"5878:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3498,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"5871:6:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:18"},{"expression":{"id":3520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3502,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3487,"src":"6308:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3503,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"6325:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3504,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"6335:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3506,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3507,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"6345:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3509,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3497,"src":"6358:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":3510,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"6368:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3512,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3513,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"6378:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3515,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3516,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"6390:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3519,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3521,"nodeType":"ExpressionStatement","src":"6308:89:18"}]}},{"expression":{"id":3535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3533,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3487,"src":"6503:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3534,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"6519:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3536,"nodeType":"ExpressionStatement","src":"6503:22:18"}]},{"condition":{"id":3546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:18","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3538,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3335,"src":"6615:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3539,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3487,"src":"6639:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3541,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3487,"src":"6655:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3542,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3331,"src":"6671:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3545,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3551,"nodeType":"IfStatement","src":"6609:137:18","trueBody":{"id":3550,"nodeType":"Block","src":"6694:52:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3547,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3313,"src":"6715:18:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3549,"nodeType":"RevertStatement","src":"6708:27:18"}]}},{"expression":{"arguments":[{"arguments":[{"id":3555,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3487,"src":"6775:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3554,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4007,"src":"6771:3:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3552,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:18","typeDescriptions":{}}},"id":3557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3436,"id":3558,"nodeType":"Return","src":"6756:33:18"}]},"documentation":{"id":3428,"nodeType":"StructuredDocumentation","src":"4277:214:18","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":3560,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:18","nodeType":"FunctionDefinition","parameters":{"id":3433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3430,"mutability":"mutable","name":"x","nameLocation":"4517:1:18","nodeType":"VariableDeclaration","scope":3560,"src":"4509:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3429,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3432,"mutability":"mutable","name":"y","nameLocation":"4528:1:18","nodeType":"VariableDeclaration","scope":3560,"src":"4520:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3431,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:18"},"returnParameters":{"id":3436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3435,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3560,"src":"4554:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3434,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:18"},"scope":4657,"src":"4496:2300:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4006,"nodeType":"Block","src":"7064:6082:18","statements":[{"condition":{"id":3576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:18","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3568,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"7080:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3569,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3335,"src":"7085:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3571,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"7109:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3572,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3331,"src":"7114:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3575,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3581,"nodeType":"IfStatement","src":"7074:112:18","trueBody":{"id":3580,"nodeType":"Block","src":"7137:49:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3577,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3316,"src":"7158:15:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3579,"nodeType":"RevertStatement","src":"7151:24:18"}]}},{"assignments":[3583],"declarations":[{"constant":false,"id":3583,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:18","nodeType":"VariableDeclaration","scope":4006,"src":"7272:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3582,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3585,"initialValue":{"hexValue":"66616c7365","id":3584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:18"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3586,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"7316:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":3587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3600,"nodeType":"IfStatement","src":"7312:417:18","trueBody":{"id":3599,"nodeType":"Block","src":"7323:406:18","statements":[{"id":3594,"nodeType":"UncheckedBlock","src":"7633:49:18","statements":[{"expression":{"id":3592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3589,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"7661:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:18","subExpression":{"id":3590,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"7666:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3593,"nodeType":"ExpressionStatement","src":"7661:6:18"}]},{"expression":{"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3595,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3583,"src":"7695:16:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3598,"nodeType":"ExpressionStatement","src":"7695:23:18"}]}},{"assignments":[3602],"declarations":[{"constant":false,"id":3602,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:18","nodeType":"VariableDeclaration","scope":4006,"src":"9030:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3601,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3603,"nodeType":"VariableDeclarationStatement","src":"9030:14:18"},{"id":3639,"nodeType":"UncheckedBlock","src":"9054:457:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3604,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9082:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3605,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"9087:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3616,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9171:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3617,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3364,"src":"9176:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3632,"nodeType":"Block","src":"9256:74:18","statements":[{"expression":{"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3628,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3602,"src":"9274:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":3629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:18","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3631,"nodeType":"ExpressionStatement","src":"9274:11:18"}]},"id":3633,"nodeType":"IfStatement","src":"9167:163:18","trueBody":{"id":3627,"nodeType":"Block","src":"9180:70:18","statements":[{"expression":{"id":3621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3619,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9198:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3620,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3364,"src":"9203:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3622,"nodeType":"ExpressionStatement","src":"9198:7:18"},{"expression":{"id":3625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3623,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3602,"src":"9223:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3624,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3367,"src":"9233:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3626,"nodeType":"ExpressionStatement","src":"9223:12:18"}]}},"id":3634,"nodeType":"IfStatement","src":"9078:252:18","trueBody":{"id":3615,"nodeType":"Block","src":"9091:70:18","statements":[{"expression":{"id":3609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3607,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9109:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3608,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"9114:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3610,"nodeType":"ExpressionStatement","src":"9109:7:18"},{"expression":{"id":3613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3611,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3602,"src":"9134:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3612,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3361,"src":"9144:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3614,"nodeType":"ExpressionStatement","src":"9134:12:18"}]}},{"expression":{"id":3637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3635,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9492:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:18","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3638,"nodeType":"ExpressionStatement","src":"9492:8:18"}]},{"assignments":[3641],"declarations":[{"constant":false,"id":3641,"mutability":"mutable","name":"product","nameLocation":"9730:7:18","nodeType":"VariableDeclaration","scope":4006,"src":"9723:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3640,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3643,"initialValue":{"id":3642,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"9740:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:18"},{"id":3788,"nodeType":"UncheckedBlock","src":"9757:957:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3644,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9785:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3645,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3370,"src":"9790:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3661,"nodeType":"IfStatement","src":"9781:104:18","trueBody":{"id":3660,"nodeType":"Block","src":"9794:91:18","statements":[{"expression":{"id":3649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3647,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9812:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3648,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3370,"src":"9817:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3650,"nodeType":"ExpressionStatement","src":"9812:7:18"},{"expression":{"id":3658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3651,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"9837:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3652,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"9848:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3653,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3373,"src":"9858:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3655,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3656,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"9864:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3659,"nodeType":"ExpressionStatement","src":"9837:33:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3662,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9902:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3663,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3376,"src":"9907:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3679,"nodeType":"IfStatement","src":"9898:104:18","trueBody":{"id":3678,"nodeType":"Block","src":"9911:91:18","statements":[{"expression":{"id":3667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3665,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"9929:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3666,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3376,"src":"9934:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3668,"nodeType":"ExpressionStatement","src":"9929:7:18"},{"expression":{"id":3676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3669,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"9954:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3670,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"9965:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3671,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3379,"src":"9975:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3673,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3674,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"9981:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3677,"nodeType":"ExpressionStatement","src":"9954:33:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3680,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10019:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3681,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"10024:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3697,"nodeType":"IfStatement","src":"10015:104:18","trueBody":{"id":3696,"nodeType":"Block","src":"10028:91:18","statements":[{"expression":{"id":3685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3683,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10046:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3684,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"10051:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3686,"nodeType":"ExpressionStatement","src":"10046:7:18"},{"expression":{"id":3694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3687,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10071:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3688,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10082:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3689,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3385,"src":"10092:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3691,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3692,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"10098:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3695,"nodeType":"ExpressionStatement","src":"10071:33:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3698,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10136:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3699,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3388,"src":"10141:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3715,"nodeType":"IfStatement","src":"10132:104:18","trueBody":{"id":3714,"nodeType":"Block","src":"10145:91:18","statements":[{"expression":{"id":3703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3701,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10163:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3702,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3388,"src":"10168:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3704,"nodeType":"ExpressionStatement","src":"10163:7:18"},{"expression":{"id":3712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3705,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10188:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3706,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10199:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3707,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"10209:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3709,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3710,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"10215:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3713,"nodeType":"ExpressionStatement","src":"10188:33:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3716,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10253:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3717,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3394,"src":"10258:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3733,"nodeType":"IfStatement","src":"10249:104:18","trueBody":{"id":3732,"nodeType":"Block","src":"10262:91:18","statements":[{"expression":{"id":3721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3719,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10280:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3720,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3394,"src":"10285:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3722,"nodeType":"ExpressionStatement","src":"10280:7:18"},{"expression":{"id":3730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3723,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10305:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3724,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10316:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3725,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"10326:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3727,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3728,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"10332:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3731,"nodeType":"ExpressionStatement","src":"10305:33:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3734,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10370:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3735,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3400,"src":"10375:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3751,"nodeType":"IfStatement","src":"10366:104:18","trueBody":{"id":3750,"nodeType":"Block","src":"10379:91:18","statements":[{"expression":{"id":3739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3737,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10397:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3738,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3400,"src":"10402:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3740,"nodeType":"ExpressionStatement","src":"10397:7:18"},{"expression":{"id":3748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3741,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10422:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3742,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10433:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3743,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3403,"src":"10443:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3745,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3746,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"10449:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3749,"nodeType":"ExpressionStatement","src":"10422:33:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3752,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10487:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3753,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3406,"src":"10492:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3769,"nodeType":"IfStatement","src":"10483:104:18","trueBody":{"id":3768,"nodeType":"Block","src":"10496:91:18","statements":[{"expression":{"id":3757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3755,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10514:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3756,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3406,"src":"10519:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3758,"nodeType":"ExpressionStatement","src":"10514:7:18"},{"expression":{"id":3766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3759,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10539:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3760,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10550:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3761,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3409,"src":"10560:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3763,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3764,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"10566:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3767,"nodeType":"ExpressionStatement","src":"10539:33:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3770,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10604:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3771,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3412,"src":"10609:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3787,"nodeType":"IfStatement","src":"10600:104:18","trueBody":{"id":3786,"nodeType":"Block","src":"10613:91:18","statements":[{"expression":{"id":3775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3773,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"10631:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3774,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3412,"src":"10636:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3776,"nodeType":"ExpressionStatement","src":"10631:7:18"},{"expression":{"id":3784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3777,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10656:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3778,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"10667:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3779,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3415,"src":"10677:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3781,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3782,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"10683:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3785,"nodeType":"ExpressionStatement","src":"10656:33:18"}]}}]},{"assignments":[3790],"declarations":[{"constant":false,"id":3790,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:18","nodeType":"VariableDeclaration","scope":4006,"src":"11018:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3789,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3792,"initialValue":{"id":3791,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"11037:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:18"},{"assignments":[3794],"declarations":[{"constant":false,"id":3794,"mutability":"mutable","name":"term","nameLocation":"11115:4:18","nodeType":"VariableDeclaration","scope":4006,"src":"11108:11:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3793,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3795,"nodeType":"VariableDeclarationStatement","src":"11108:11:18"},{"expression":{"id":3798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3796,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11228:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3797,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11235:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3799,"nodeType":"ExpressionStatement","src":"11228:8:18"},{"id":4005,"nodeType":"UncheckedBlock","src":"11246:1894:18","statements":[{"expression":{"id":3802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3800,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"11270:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3801,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11283:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3803,"nodeType":"ExpressionStatement","src":"11270:17:18"},{"expression":{"id":3814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3804,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11536:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3805,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11545:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3806,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11552:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3808,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3809,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"11557:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3811,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":3812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:18","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3815,"nodeType":"ExpressionStatement","src":"11536:32:18"},{"expression":{"id":3818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3816,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"11582:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3817,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11595:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3819,"nodeType":"ExpressionStatement","src":"11582:17:18"},{"expression":{"id":3830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3820,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11614:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3821,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11623:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3822,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11630:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3825,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"11635:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3827,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":3828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:18","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3831,"nodeType":"ExpressionStatement","src":"11614:32:18"},{"expression":{"id":3834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3832,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"11660:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3833,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11673:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3835,"nodeType":"ExpressionStatement","src":"11660:17:18"},{"expression":{"id":3846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3836,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11692:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3837,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11701:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3838,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11708:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3840,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3841,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"11713:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3843,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":3844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:18","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3847,"nodeType":"ExpressionStatement","src":"11692:32:18"},{"expression":{"id":3850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3848,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"11738:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3849,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11751:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3851,"nodeType":"ExpressionStatement","src":"11738:17:18"},{"expression":{"id":3862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3852,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11770:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3853,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11779:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3854,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11786:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3856,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3857,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"11791:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3859,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":3860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:18","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3863,"nodeType":"ExpressionStatement","src":"11770:32:18"},{"expression":{"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3864,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"11816:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3865,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11829:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3867,"nodeType":"ExpressionStatement","src":"11816:17:18"},{"expression":{"id":3878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3868,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11848:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3869,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11857:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3870,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11864:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3872,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3873,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"11869:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3875,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":3876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:18","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3879,"nodeType":"ExpressionStatement","src":"11848:32:18"},{"expression":{"id":3882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3880,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"11894:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3881,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11907:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3883,"nodeType":"ExpressionStatement","src":"11894:17:18"},{"expression":{"id":3894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3884,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11926:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3885,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11935:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3886,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"11942:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3888,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3889,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"11947:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3891,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":3892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:18","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3895,"nodeType":"ExpressionStatement","src":"11926:32:18"},{"expression":{"id":3898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3896,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"11972:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3897,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"11985:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3899,"nodeType":"ExpressionStatement","src":"11972:17:18"},{"expression":{"id":3910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3900,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12004:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3901,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12013:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3902,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12020:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3904,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3905,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"12025:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3907,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":3908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:18","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3911,"nodeType":"ExpressionStatement","src":"12004:32:18"},{"expression":{"id":3914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3912,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"12050:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3913,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12063:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3915,"nodeType":"ExpressionStatement","src":"12050:17:18"},{"expression":{"id":3926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3916,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12082:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3917,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12091:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3918,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12098:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3920,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3921,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"12103:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3923,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":3924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:18","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3927,"nodeType":"ExpressionStatement","src":"12082:32:18"},{"expression":{"id":3930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3928,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"12128:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3929,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12141:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3931,"nodeType":"ExpressionStatement","src":"12128:17:18"},{"expression":{"id":3942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3932,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12160:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3933,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12169:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3934,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12176:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3936,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3937,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"12181:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3939,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":3940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:18","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3943,"nodeType":"ExpressionStatement","src":"12160:33:18"},{"expression":{"id":3946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3944,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"12207:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3945,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12220:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3947,"nodeType":"ExpressionStatement","src":"12207:17:18"},{"expression":{"id":3958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3948,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12239:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3949,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12248:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3950,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12255:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3952,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3953,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"12260:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3955,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":3956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:18","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3959,"nodeType":"ExpressionStatement","src":"12239:33:18"},{"expression":{"id":3962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3960,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"12286:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3961,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12299:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3963,"nodeType":"ExpressionStatement","src":"12286:17:18"},{"expression":{"id":3974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3964,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12318:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3965,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12327:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3966,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3563,"src":"12334:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3968,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3969,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"12339:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3971,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":3972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:18","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3975,"nodeType":"ExpressionStatement","src":"12318:33:18"},{"expression":{"id":3978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3976,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"12365:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3977,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3794,"src":"12378:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3979,"nodeType":"ExpressionStatement","src":"12365:17:18"},{"assignments":[3981],"declarations":[{"constant":false,"id":3981,"mutability":"mutable","name":"result","nameLocation":"12914:6:18","nodeType":"VariableDeclaration","scope":4005,"src":"12907:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3980,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3994,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3982,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3641,"src":"12926:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3983,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3790,"src":"12936:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3985,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3986,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"12949:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3988,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3989,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3602,"src":"12959:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3991,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:18","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:18"},{"expression":{"condition":{"id":3995,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3583,"src":"13075:16:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":4002,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3981,"src":"13123:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:18","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3996,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"13095:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3997,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"13104:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3999,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4000,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3981,"src":"13114:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3567,"id":4004,"nodeType":"Return","src":"13068:61:18"}]}]},"documentation":{"id":3561,"nodeType":"StructuredDocumentation","src":"6802:203:18","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":4007,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:18","nodeType":"FunctionDefinition","parameters":{"id":3564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3563,"mutability":"mutable","name":"x","nameLocation":"7030:1:18","nodeType":"VariableDeclaration","scope":4007,"src":"7023:8:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3562,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:18"},"returnParameters":{"id":3567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3566,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4007,"src":"7056:6:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3565,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:18"},"scope":4657,"src":"7010:6136:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4080,"nodeType":"Block","src":"13315:861:18","statements":[{"assignments":[4018],"declarations":[{"constant":false,"id":4018,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:18","nodeType":"VariableDeclaration","scope":4080,"src":"13545:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4017,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4019,"nodeType":"VariableDeclarationStatement","src":"13545:14:18"},{"id":4044,"nodeType":"UncheckedBlock","src":"13569:214:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4020,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3340,"src":"13597:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4021,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4012,"src":"13617:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4023,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4012,"src":"13625:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4024,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"13632:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4042,"nodeType":"Block","src":"13712:61:18","statements":[{"expression":{"id":4040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4034,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"13730:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4036,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4012,"src":"13744:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4035,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4501,"src":"13740:3:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":4037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4038,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"13752:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4041,"nodeType":"ExpressionStatement","src":"13730:28:18"}]},"id":4043,"nodeType":"IfStatement","src":"13593:180:18","trueBody":{"id":4033,"nodeType":"Block","src":"13651:55:18","statements":[{"expression":{"id":4031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4027,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"13669:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4029,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4012,"src":"13686:4:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4028,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"13679:6:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":4030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4032,"nodeType":"ExpressionStatement","src":"13669:22:18"}]}}]},{"assignments":[4046],"declarations":[{"constant":false,"id":4046,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:18","nodeType":"VariableDeclaration","scope":4080,"src":"13793:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4045,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4047,"nodeType":"VariableDeclarationStatement","src":"13793:13:18"},{"id":4079,"nodeType":"UncheckedBlock","src":"13816:354:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4048,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3340,"src":"13844:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4049,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4010,"src":"13864:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4051,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4010,"src":"13871:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4052,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"13877:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4070,"nodeType":"Block","src":"13955:59:18","statements":[{"expression":{"id":4068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4062,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4046,"src":"13973:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4064,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4010,"src":"13986:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4063,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4501,"src":"13982:3:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":4065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4066,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"13993:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4069,"nodeType":"ExpressionStatement","src":"13973:26:18"}]},"id":4071,"nodeType":"IfStatement","src":"13840:174:18","trueBody":{"id":4061,"nodeType":"Block","src":"13896:53:18","statements":[{"expression":{"id":4059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4055,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4046,"src":"13914:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4057,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4010,"src":"13930:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4056,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"13923:6:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":4058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4060,"nodeType":"ExpressionStatement","src":"13914:20:18"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4072,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4046,"src":"14133:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4073,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"14142:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4075,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4076,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"14152:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":4016,"id":4078,"nodeType":"Return","src":"14125:34:18"}]}]},"documentation":{"id":4008,"nodeType":"StructuredDocumentation","src":"13152:89:18","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":4081,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:18","nodeType":"FunctionDefinition","parameters":{"id":4013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4010,"mutability":"mutable","name":"arg","nameLocation":"13266:3:18","nodeType":"VariableDeclaration","scope":4081,"src":"13259:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4009,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":4012,"mutability":"mutable","name":"base","nameLocation":"13278:4:18","nodeType":"VariableDeclaration","scope":4081,"src":"13271:11:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4011,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:18"},"returnParameters":{"id":4016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4015,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4081,"src":"13307:6:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4014,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:18"},"scope":4657,"src":"13246:930:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4118,"nodeType":"Block","src":"14319:353:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4089,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4084,"src":"14416:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":4090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4096,"nodeType":"IfStatement","src":"14412:57:18","trueBody":{"id":4095,"nodeType":"Block","src":"14424:45:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4092,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3319,"src":"14445:11:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4094,"nodeType":"RevertStatement","src":"14438:20:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4097,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3340,"src":"14482:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4098,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4084,"src":"14502:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4100,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4084,"src":"14507:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4101,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3345,"src":"14511:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4116,"nodeType":"Block","src":"14628:38:18","statements":[{"expression":{"arguments":[{"id":4113,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4084,"src":"14653:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4112,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4501,"src":"14649:3:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":4114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":4088,"id":4115,"nodeType":"Return","src":"14642:13:18"}]},"id":4117,"nodeType":"IfStatement","src":"14478:188:18","trueBody":{"id":4111,"nodeType":"Block","src":"14530:92:18","statements":[{"id":4110,"nodeType":"UncheckedBlock","src":"14544:68:18","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4105,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4084,"src":"14586:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4104,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"14579:6:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":4106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4107,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"14591:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":4088,"id":4109,"nodeType":"Return","src":"14572:25:18"}]}]}}]},"documentation":{"id":4082,"nodeType":"StructuredDocumentation","src":"14182:79:18","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":4119,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:18","nodeType":"FunctionDefinition","parameters":{"id":4085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4084,"mutability":"mutable","name":"a","nameLocation":"14285:1:18","nodeType":"VariableDeclaration","scope":4119,"src":"14278:8:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4083,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:18"},"returnParameters":{"id":4088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4119,"src":"14311:6:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4086,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:18"},"scope":4657,"src":"14266:406:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4500,"nodeType":"Block","src":"14824:5531:18","statements":[{"assignments":[4128],"declarations":[{"constant":false,"id":4128,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:18","nodeType":"VariableDeclaration","scope":4500,"src":"14910:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4127,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":4130,"initialValue":{"hexValue":"66616c7365","id":4129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:18"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4131,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"14954:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4132,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"14958:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4149,"nodeType":"IfStatement","src":"14950:381:18","trueBody":{"id":4148,"nodeType":"Block","src":"14966:365:18","statements":[{"id":4143,"nodeType":"UncheckedBlock","src":"15216:68:18","statements":[{"expression":{"id":4141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4134,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"15244:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4135,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"15249:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4136,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"15258:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4138,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4139,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"15268:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4142,"nodeType":"ExpressionStatement","src":"15244:25:18"}]},{"expression":{"id":4146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4144,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4128,"src":"15297:16:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":4145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4147,"nodeType":"ExpressionStatement","src":"15297:23:18"}]}},{"assignments":[4151],"declarations":[{"constant":false,"id":4151,"mutability":"mutable","name":"sum","nameLocation":"16663:3:18","nodeType":"VariableDeclaration","scope":4500,"src":"16656:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4150,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4153,"initialValue":{"hexValue":"30","id":4152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:18"},{"id":4372,"nodeType":"UncheckedBlock","src":"16680:1674:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4154,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"16708:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4155,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3361,"src":"16713:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4156,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"16718:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4168,"nodeType":"IfStatement","src":"16704:126:18","trueBody":{"id":4167,"nodeType":"Block","src":"16726:104:18","statements":[{"expression":{"id":4161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4159,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"16744:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":4160,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3361,"src":"16749:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4162,"nodeType":"ExpressionStatement","src":"16744:7:18"},{"expression":{"id":4165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4163,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"16806:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4164,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3358,"src":"16813:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4166,"nodeType":"ExpressionStatement","src":"16806:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4169,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"16848:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4170,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3367,"src":"16853:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4171,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"16858:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4183,"nodeType":"IfStatement","src":"16844:126:18","trueBody":{"id":4182,"nodeType":"Block","src":"16866:104:18","statements":[{"expression":{"id":4176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4174,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"16884:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":4175,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3367,"src":"16889:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4177,"nodeType":"ExpressionStatement","src":"16884:7:18"},{"expression":{"id":4180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4178,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"16946:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4179,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3364,"src":"16953:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4181,"nodeType":"ExpressionStatement","src":"16946:9:18"}]}},{"expression":{"id":4186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4184,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"17109:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":4185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:18","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4187,"nodeType":"ExpressionStatement","src":"17109:10:18"},{"expression":{"id":4190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4188,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17133:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":4189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:18","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4191,"nodeType":"ExpressionStatement","src":"17133:8:18"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4192,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17276:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4193,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3373,"src":"17281:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4209,"nodeType":"IfStatement","src":"17272:94:18","trueBody":{"id":4208,"nodeType":"Block","src":"17285:81:18","statements":[{"expression":{"id":4202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4195,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17303:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4196,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17308:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4197,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"17312:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4199,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4200,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3373,"src":"17322:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4203,"nodeType":"ExpressionStatement","src":"17303:21:18"},{"expression":{"id":4206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4204,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"17342:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4205,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3370,"src":"17349:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4207,"nodeType":"ExpressionStatement","src":"17342:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4210,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17384:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4211,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3379,"src":"17389:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4227,"nodeType":"IfStatement","src":"17380:94:18","trueBody":{"id":4226,"nodeType":"Block","src":"17393:81:18","statements":[{"expression":{"id":4220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4213,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17411:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4214,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17416:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4215,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"17420:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4217,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4218,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3379,"src":"17430:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4221,"nodeType":"ExpressionStatement","src":"17411:21:18"},{"expression":{"id":4224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4222,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"17450:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4223,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3376,"src":"17457:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4225,"nodeType":"ExpressionStatement","src":"17450:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4228,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17492:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4229,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3385,"src":"17497:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4245,"nodeType":"IfStatement","src":"17488:94:18","trueBody":{"id":4244,"nodeType":"Block","src":"17501:81:18","statements":[{"expression":{"id":4238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4231,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17519:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4232,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17524:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4233,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"17528:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4235,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4236,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3385,"src":"17538:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4239,"nodeType":"ExpressionStatement","src":"17519:21:18"},{"expression":{"id":4242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4240,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"17558:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4241,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3382,"src":"17565:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4243,"nodeType":"ExpressionStatement","src":"17558:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4246,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17600:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4247,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"17605:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4263,"nodeType":"IfStatement","src":"17596:94:18","trueBody":{"id":4262,"nodeType":"Block","src":"17609:81:18","statements":[{"expression":{"id":4256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4249,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17627:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4250,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17632:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4251,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"17636:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4253,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4254,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3391,"src":"17646:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4257,"nodeType":"ExpressionStatement","src":"17627:21:18"},{"expression":{"id":4260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4258,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"17666:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4259,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3388,"src":"17673:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4261,"nodeType":"ExpressionStatement","src":"17666:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4264,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17708:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4265,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"17713:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4281,"nodeType":"IfStatement","src":"17704:94:18","trueBody":{"id":4280,"nodeType":"Block","src":"17717:81:18","statements":[{"expression":{"id":4274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4267,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17735:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4268,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17740:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4269,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"17744:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4271,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4272,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3397,"src":"17754:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4275,"nodeType":"ExpressionStatement","src":"17735:21:18"},{"expression":{"id":4278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4276,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"17774:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4277,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3394,"src":"17781:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4279,"nodeType":"ExpressionStatement","src":"17774:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4282,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17816:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4283,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3403,"src":"17821:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4299,"nodeType":"IfStatement","src":"17812:94:18","trueBody":{"id":4298,"nodeType":"Block","src":"17825:81:18","statements":[{"expression":{"id":4292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4285,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17843:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4286,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17848:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4287,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"17852:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4289,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4290,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3403,"src":"17862:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4293,"nodeType":"ExpressionStatement","src":"17843:21:18"},{"expression":{"id":4296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4294,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"17882:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4295,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3400,"src":"17889:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4297,"nodeType":"ExpressionStatement","src":"17882:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4300,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17924:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4301,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3409,"src":"17929:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4317,"nodeType":"IfStatement","src":"17920:94:18","trueBody":{"id":4316,"nodeType":"Block","src":"17933:81:18","statements":[{"expression":{"id":4310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4303,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17951:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4304,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"17956:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4305,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"17960:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4307,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4308,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3409,"src":"17970:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4311,"nodeType":"ExpressionStatement","src":"17951:21:18"},{"expression":{"id":4314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4312,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"17990:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4313,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3406,"src":"17997:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4315,"nodeType":"ExpressionStatement","src":"17990:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4318,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18032:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4319,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3415,"src":"18037:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4335,"nodeType":"IfStatement","src":"18028:94:18","trueBody":{"id":4334,"nodeType":"Block","src":"18041:81:18","statements":[{"expression":{"id":4328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4321,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18059:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4322,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18064:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4323,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"18068:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4325,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4326,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3415,"src":"18078:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4329,"nodeType":"ExpressionStatement","src":"18059:21:18"},{"expression":{"id":4332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4330,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"18098:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4331,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3412,"src":"18105:2:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4333,"nodeType":"ExpressionStatement","src":"18098:9:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4336,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18140:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4337,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3421,"src":"18145:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4353,"nodeType":"IfStatement","src":"18136:97:18","trueBody":{"id":4352,"nodeType":"Block","src":"18150:83:18","statements":[{"expression":{"id":4346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4339,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18168:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4340,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18173:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4341,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"18177:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4343,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4344,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3421,"src":"18187:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4347,"nodeType":"ExpressionStatement","src":"18168:22:18"},{"expression":{"id":4350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4348,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"18208:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4349,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3418,"src":"18215:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4351,"nodeType":"ExpressionStatement","src":"18208:10:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4354,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18251:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4355,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"18256:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4371,"nodeType":"IfStatement","src":"18247:97:18","trueBody":{"id":4370,"nodeType":"Block","src":"18261:83:18","statements":[{"expression":{"id":4364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4357,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18279:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4358,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18284:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4359,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"18288:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4361,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4362,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"18298:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4365,"nodeType":"ExpressionStatement","src":"18279:22:18"},{"expression":{"id":4368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4366,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"18319:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4367,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3424,"src":"18326:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4369,"nodeType":"ExpressionStatement","src":"18319:10:18"}]}}]},{"id":4499,"nodeType":"UncheckedBlock","src":"18856:1493:18","statements":[{"assignments":[4374],"declarations":[{"constant":false,"id":4374,"mutability":"mutable","name":"z","nameLocation":"18887:1:18","nodeType":"VariableDeclaration","scope":4499,"src":"18880:8:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4373,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4387,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4375,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18893:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4376,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"18897:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4378,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4379,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"18907:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4381,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4382,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"18918:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4383,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"18922:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4385,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:18"},{"assignments":[4389],"declarations":[{"constant":false,"id":4389,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:18","nodeType":"VariableDeclaration","scope":4499,"src":"18943:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4388,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4396,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4390,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"18963:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4391,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"18967:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4393,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4394,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"18972:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:18"},{"assignments":[4398],"declarations":[{"constant":false,"id":4398,"mutability":"mutable","name":"num","nameLocation":"19074:3:18","nodeType":"VariableDeclaration","scope":4499,"src":"19067:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4397,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4400,"initialValue":{"id":4399,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4374,"src":"19080:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:18"},{"assignments":[4402],"declarations":[{"constant":false,"id":4402,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:18","nodeType":"VariableDeclaration","scope":4499,"src":"19203:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4401,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4404,"initialValue":{"id":4403,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19222:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:18"},{"expression":{"id":4412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4405,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19304:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4406,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19311:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4407,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"19317:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4409,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4410,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"19330:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4413,"nodeType":"ExpressionStatement","src":"19304:32:18"},{"expression":{"id":4418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4414,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"19350:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4415,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19363:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":4416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:18","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4419,"nodeType":"ExpressionStatement","src":"19350:20:18"},{"expression":{"id":4427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4420,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19385:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4421,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19392:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4422,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"19398:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4424,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4425,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"19411:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4428,"nodeType":"ExpressionStatement","src":"19385:32:18"},{"expression":{"id":4433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4429,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"19431:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4430,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19444:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":4431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:18","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4434,"nodeType":"ExpressionStatement","src":"19431:20:18"},{"expression":{"id":4442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4435,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19466:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4436,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19473:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4437,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"19479:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4439,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4440,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"19492:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4443,"nodeType":"ExpressionStatement","src":"19466:32:18"},{"expression":{"id":4448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4444,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"19512:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4445,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19525:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":4446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:18","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4449,"nodeType":"ExpressionStatement","src":"19512:20:18"},{"expression":{"id":4457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4450,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19547:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4451,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19554:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4452,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"19560:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4454,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4455,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"19573:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4458,"nodeType":"ExpressionStatement","src":"19547:32:18"},{"expression":{"id":4463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4459,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"19593:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4460,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19606:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":4461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:18","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4464,"nodeType":"ExpressionStatement","src":"19593:20:18"},{"expression":{"id":4472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4465,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19628:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4466,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19635:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4467,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"19641:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4469,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4470,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3325,"src":"19654:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4473,"nodeType":"ExpressionStatement","src":"19628:32:18"},{"expression":{"id":4478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4474,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"19674:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4475,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"19687:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":4476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:18","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4479,"nodeType":"ExpressionStatement","src":"19674:21:18"},{"expression":{"id":4482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4480,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"19866:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":4481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:18","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4483,"nodeType":"ExpressionStatement","src":"19866:14:18"},{"assignments":[4485],"declarations":[{"constant":false,"id":4485,"mutability":"mutable","name":"result","nameLocation":"20169:6:18","nodeType":"VariableDeclaration","scope":4499,"src":"20162:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4484,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4492,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4486,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4151,"src":"20179:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4487,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4402,"src":"20185:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4489,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":4490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:18","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:18"},{"expression":{"condition":{"id":4493,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4128,"src":"20303:16:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":4496,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4485,"src":"20332:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:18","trueExpression":{"id":4495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:18","subExpression":{"id":4494,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4485,"src":"20323:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":4126,"id":4498,"nodeType":"Return","src":"20296:42:18"}]}]},"documentation":{"id":4120,"nodeType":"StructuredDocumentation","src":"14678:88:18","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":4501,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:18","nodeType":"FunctionDefinition","parameters":{"id":4123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4122,"mutability":"mutable","name":"a","nameLocation":"14791:1:18","nodeType":"VariableDeclaration","scope":4501,"src":"14784:8:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4121,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:18"},"returnParameters":{"id":4126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4501,"src":"14816:6:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4124,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:18"},"scope":4657,"src":"14771:5584:18","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":4655,"nodeType":"Block","src":"20678:1804:18","statements":[{"id":4654,"nodeType":"UncheckedBlock","src":"20892:1584:18","statements":[{"expression":{"id":4511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4509,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4504,"src":"20916:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":4510,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3322,"src":"20921:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4512,"nodeType":"ExpressionStatement","src":"20916:11:18"},{"assignments":[4514],"declarations":[{"constant":false,"id":4514,"mutability":"mutable","name":"z","nameLocation":"21315:1:18","nodeType":"VariableDeclaration","scope":4654,"src":"21308:8:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4513,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4527,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4515,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4504,"src":"21321:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4516,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"21325:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4518,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4519,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"21335:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4521,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4522,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4504,"src":"21346:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4523,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"21350:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4525,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:18"},{"assignments":[4529],"declarations":[{"constant":false,"id":4529,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:18","nodeType":"VariableDeclaration","scope":4654,"src":"21371:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4528,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4536,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4530,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4514,"src":"21391:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4531,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4514,"src":"21395:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4533,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4534,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"21400:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:18"},{"assignments":[4538],"declarations":[{"constant":false,"id":4538,"mutability":"mutable","name":"num","nameLocation":"21502:3:18","nodeType":"VariableDeclaration","scope":4654,"src":"21495:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4537,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4540,"initialValue":{"id":4539,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4514,"src":"21508:1:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:18"},{"assignments":[4542],"declarations":[{"constant":false,"id":4542,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:18","nodeType":"VariableDeclaration","scope":4654,"src":"21631:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4541,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4544,"initialValue":{"id":4543,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21650:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:18"},{"expression":{"id":4552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4545,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21732:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4546,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21739:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4547,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"21745:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4549,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4550,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"21758:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4553,"nodeType":"ExpressionStatement","src":"21732:32:18"},{"expression":{"id":4558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4554,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4542,"src":"21778:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4555,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21791:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":4556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:18","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4559,"nodeType":"ExpressionStatement","src":"21778:20:18"},{"expression":{"id":4567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4560,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21813:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4561,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21820:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4562,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"21826:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4564,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4565,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"21839:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4568,"nodeType":"ExpressionStatement","src":"21813:32:18"},{"expression":{"id":4573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4569,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4542,"src":"21859:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4570,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21872:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":4571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:18","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4574,"nodeType":"ExpressionStatement","src":"21859:20:18"},{"expression":{"id":4582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4575,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21894:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4576,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21901:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4577,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"21907:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4579,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4580,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"21920:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4583,"nodeType":"ExpressionStatement","src":"21894:32:18"},{"expression":{"id":4588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4584,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4542,"src":"21940:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4585,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21953:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":4586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:18","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4589,"nodeType":"ExpressionStatement","src":"21940:20:18"},{"expression":{"id":4597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4590,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21975:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4591,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"21982:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4592,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"21988:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4594,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4595,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"22001:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4598,"nodeType":"ExpressionStatement","src":"21975:32:18"},{"expression":{"id":4603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4599,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4542,"src":"22021:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4600,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22034:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":4601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:18","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4604,"nodeType":"ExpressionStatement","src":"22021:20:18"},{"expression":{"id":4612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4605,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22056:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4606,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22063:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4607,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"22069:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4609,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4610,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"22082:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4613,"nodeType":"ExpressionStatement","src":"22056:32:18"},{"expression":{"id":4618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4614,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4542,"src":"22102:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4615,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22115:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":4616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:18","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4619,"nodeType":"ExpressionStatement","src":"22102:21:18"},{"expression":{"id":4627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4620,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22138:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4621,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22145:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4622,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"22151:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4624,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4625,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"22164:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4628,"nodeType":"ExpressionStatement","src":"22138:32:18"},{"expression":{"id":4633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4629,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4542,"src":"22184:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4630,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22197:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":4631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:18","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4634,"nodeType":"ExpressionStatement","src":"22184:21:18"},{"expression":{"id":4642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4635,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22220:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4636,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22227:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4637,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4529,"src":"22233:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4639,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4640,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3328,"src":"22246:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4643,"nodeType":"ExpressionStatement","src":"22220:32:18"},{"expression":{"id":4648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4644,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4542,"src":"22266:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4645,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"22279:3:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":4646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:18","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4649,"nodeType":"ExpressionStatement","src":"22266:21:18"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4650,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4542,"src":"22452:9:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":4651,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:18","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":4508,"id":4653,"nodeType":"Return","src":"22445:20:18"}]}]},"documentation":{"id":4502,"nodeType":"StructuredDocumentation","src":"20361:256:18","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":4656,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:18","nodeType":"FunctionDefinition","parameters":{"id":4505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4504,"mutability":"mutable","name":"x","nameLocation":"20645:1:18","nodeType":"VariableDeclaration","scope":4656,"src":"20638:8:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4503,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:18"},"returnParameters":{"id":4508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4507,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4656,"src":"20670:6:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4506,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:18"},"scope":4657,"src":"20622:1860:18","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4658,"src":"595:21889:18","usedErrors":[3307,3310,3313,3316,3319],"usedEvents":[]}],"src":"33:22452:18"},"id":18},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[4726],"StorageSlotExtension":[4939]},"id":4727,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4659,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:19"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":4661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4727,"sourceUnit":4940,"src":"59:66:19","symbolAliases":[{"foreign":{"id":4660,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4939,"src":"68:20:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":4662,"nodeType":"StructuredDocumentation","src":"127:155:19","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":4726,"linearizedBaseContracts":[4726],"name":"ReentrancyGuardTransient","nameLocation":"301:24:19","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4664,"libraryName":{"id":4663,"name":"StorageSlotExtension","nameLocations":["338:20:19"],"nodeType":"IdentifierPath","referencedDeclaration":4939,"src":"338:20:19"},"nodeType":"UsingForDirective","src":"332:33:19"},{"constant":true,"id":4667,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:19","nodeType":"VariableDeclaration","scope":4726,"src":"490:127:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4665,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":4666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:19","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":4668,"nodeType":"StructuredDocumentation","src":"624:40:19","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":4670,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:19","nodeType":"ErrorDefinition","parameters":{"id":4669,"nodeType":"ParameterList","parameters":[],"src":"703:2:19"},"src":"669:37:19"},{"body":{"id":4680,"nodeType":"Block","src":"1107:79:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4673,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4700,"src":"1117:19:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4675,"nodeType":"ExpressionStatement","src":"1117:21:19"},{"id":4676,"nodeType":"PlaceholderStatement","src":"1148:1:19"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4677,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"1159:18:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4679,"nodeType":"ExpressionStatement","src":"1159:20:19"}]},"documentation":{"id":4671,"nodeType":"StructuredDocumentation","src":"712:366:19","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":4681,"name":"nonReentrant","nameLocation":"1092:12:19","nodeType":"ModifierDefinition","parameters":{"id":4672,"nodeType":"ParameterList","parameters":[],"src":"1104:2:19"},"src":"1083:103:19","virtual":false,"visibility":"internal"},{"body":{"id":4699,"nodeType":"Block","src":"1231:310:19","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":4684,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4725,"src":"1320:23:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":4685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4690,"nodeType":"IfStatement","src":"1316:93:19","trueBody":{"id":4689,"nodeType":"Block","src":"1347:62:19","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4686,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4670,"src":"1368:28:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4688,"nodeType":"RevertStatement","src":"1361:37:19"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":4696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4691,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"1484:25:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:19","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4777,"src":"1484:35:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4762_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:19","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":4872,"src":"1484:44:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$4762_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4762_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":4697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4698,"nodeType":"ExpressionStatement","src":"1484:50:19"}]},"id":4700,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:19","nodeType":"FunctionDefinition","parameters":{"id":4682,"nodeType":"ParameterList","parameters":[],"src":"1220:2:19"},"returnParameters":{"id":4683,"nodeType":"ParameterList","parameters":[],"src":"1231:0:19"},"scope":4726,"src":"1192:349:19","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4711,"nodeType":"Block","src":"1585:68:19","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":4708,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4703,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"1595:25:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:19","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4777,"src":"1595:35:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4762_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:19","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":4872,"src":"1595:44:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$4762_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4762_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":4709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4710,"nodeType":"ExpressionStatement","src":"1595:51:19"}]},"id":4712,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:19","nodeType":"FunctionDefinition","parameters":{"id":4701,"nodeType":"ParameterList","parameters":[],"src":"1574:2:19"},"returnParameters":{"id":4702,"nodeType":"ParameterList","parameters":[],"src":"1585:0:19"},"scope":4726,"src":"1547:106:19","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4724,"nodeType":"Block","src":"1896:69:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4718,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"1913:25:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:19","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4777,"src":"1913:35:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4762_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:19","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":4861,"src":"1913:43:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$4762_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4762_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":4722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4717,"id":4723,"nodeType":"Return","src":"1906:52:19"}]},"documentation":{"id":4713,"nodeType":"StructuredDocumentation","src":"1659:168:19","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":4725,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:19","nodeType":"FunctionDefinition","parameters":{"id":4714,"nodeType":"ParameterList","parameters":[],"src":"1864:2:19"},"returnParameters":{"id":4717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4716,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4725,"src":"1890:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4715,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:19"},"scope":4726,"src":"1832:133:19","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":4727,"src":"283:1684:19","usedErrors":[4670],"usedEvents":[]}],"src":"33:1935:19"},"id":19},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[4939]},"id":4940,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4728,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:20"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":4729,"nodeType":"StructuredDocumentation","src":"59:218:20","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":4939,"linearizedBaseContracts":[4939],"name":"StorageSlotExtension","nameLocation":"286:20:20","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":4732,"members":[{"constant":false,"id":4731,"mutability":"mutable","name":"value","nameLocation":"348:5:20","nodeType":"VariableDeclaration","scope":4732,"src":"341:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4730,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:20","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:20","nodeType":"StructDefinition","scope":4939,"src":"313:47:20","visibility":"public"},{"body":{"id":4742,"nodeType":"Block","src":"524:106:20","statements":[{"AST":{"nativeSrc":"586:38:20","nodeType":"YulBlock","src":"586:38:20","statements":[{"nativeSrc":"600:14:20","nodeType":"YulAssignment","src":"600:14:20","value":{"name":"slot","nativeSrc":"610:4:20","nodeType":"YulIdentifier","src":"610:4:20"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:20","nodeType":"YulIdentifier","src":"600:6:20"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4739,"isOffset":false,"isSlot":true,"src":"600:6:20","suffix":"slot","valueSize":1},{"declaration":4735,"isOffset":false,"isSlot":false,"src":"610:4:20","valueSize":1}],"id":4741,"nodeType":"InlineAssembly","src":"577:47:20"}]},"documentation":{"id":4733,"nodeType":"StructuredDocumentation","src":"366:71:20","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":4743,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:20","nodeType":"FunctionDefinition","parameters":{"id":4736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4735,"mutability":"mutable","name":"slot","nameLocation":"473:4:20","nodeType":"VariableDeclaration","scope":4743,"src":"465:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4734,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:20"},"returnParameters":{"id":4740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4739,"mutability":"mutable","name":"r","nameLocation":"521:1:20","nodeType":"VariableDeclaration","scope":4743,"src":"502:20:20","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4732_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":4738,"nodeType":"UserDefinedTypeName","pathNode":{"id":4737,"name":"Int256Slot","nameLocations":["502:10:20"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"502:10:20"},"referencedDeclaration":4732,"src":"502:10:20","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4732_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:20"},"scope":4939,"src":"442:188:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":4745,"name":"AddressSlotType","nameLocation":"709:15:20","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:20","underlyingType":{"id":4744,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4759,"nodeType":"Block","src":"873:50:20","statements":[{"expression":{"arguments":[{"id":4756,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4748,"src":"911:4:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4754,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4745,"src":"890:15:20","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$4745_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":4755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:20","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:20","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$4745_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":4757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4745","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":4753,"id":4758,"nodeType":"Return","src":"883:33:20"}]},"documentation":{"id":4746,"nodeType":"StructuredDocumentation","src":"742:53:20","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":4760,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:20","nodeType":"FunctionDefinition","parameters":{"id":4749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4748,"mutability":"mutable","name":"slot","nameLocation":"827:4:20","nodeType":"VariableDeclaration","scope":4760,"src":"819:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4747,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:20"},"returnParameters":{"id":4753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4760,"src":"856:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4745","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4751,"nodeType":"UserDefinedTypeName","pathNode":{"id":4750,"name":"AddressSlotType","nameLocations":["856:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4745,"src":"856:15:20"},"referencedDeclaration":4745,"src":"856:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4745","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:20"},"scope":4939,"src":"800:123:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":4762,"name":"BooleanSlotType","nameLocation":"1001:15:20","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:20","underlyingType":{"id":4761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4776,"nodeType":"Block","src":"1165:50:20","statements":[{"expression":{"arguments":[{"id":4773,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4765,"src":"1203:4:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4771,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4762,"src":"1182:15:20","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$4762_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":4772,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:20","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:20","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4762_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":4770,"id":4775,"nodeType":"Return","src":"1175:33:20"}]},"documentation":{"id":4763,"nodeType":"StructuredDocumentation","src":"1034:53:20","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":4777,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:20","nodeType":"FunctionDefinition","parameters":{"id":4766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4765,"mutability":"mutable","name":"slot","nameLocation":"1119:4:20","nodeType":"VariableDeclaration","scope":4777,"src":"1111:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4764,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:20"},"returnParameters":{"id":4770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4769,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4777,"src":"1148:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4768,"nodeType":"UserDefinedTypeName","pathNode":{"id":4767,"name":"BooleanSlotType","nameLocations":["1148:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4762,"src":"1148:15:20"},"referencedDeclaration":4762,"src":"1148:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:20"},"scope":4939,"src":"1092:123:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":4779,"name":"Bytes32SlotType","nameLocation":"1293:15:20","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:20","underlyingType":{"id":4778,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4793,"nodeType":"Block","src":"1457:50:20","statements":[{"expression":{"arguments":[{"id":4790,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4782,"src":"1495:4:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4788,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4779,"src":"1474:15:20","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$4779_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":4789,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:20","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:20","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$4779_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":4791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4779","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":4787,"id":4792,"nodeType":"Return","src":"1467:33:20"}]},"documentation":{"id":4780,"nodeType":"StructuredDocumentation","src":"1326:53:20","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":4794,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:20","nodeType":"FunctionDefinition","parameters":{"id":4783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4782,"mutability":"mutable","name":"slot","nameLocation":"1411:4:20","nodeType":"VariableDeclaration","scope":4794,"src":"1403:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4781,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:20"},"returnParameters":{"id":4787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4794,"src":"1440:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4779","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4785,"nodeType":"UserDefinedTypeName","pathNode":{"id":4784,"name":"Bytes32SlotType","nameLocations":["1440:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4779,"src":"1440:15:20"},"referencedDeclaration":4779,"src":"1440:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4779","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:20"},"scope":4939,"src":"1384:123:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":4796,"name":"Uint256SlotType","nameLocation":"1585:15:20","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:20","underlyingType":{"id":4795,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4810,"nodeType":"Block","src":"1749:50:20","statements":[{"expression":{"arguments":[{"id":4807,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4799,"src":"1787:4:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4805,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"1766:15:20","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$4796_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":4806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:20","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:20","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$4796_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":4808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4796","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":4804,"id":4809,"nodeType":"Return","src":"1759:33:20"}]},"documentation":{"id":4797,"nodeType":"StructuredDocumentation","src":"1618:53:20","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":4811,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:20","nodeType":"FunctionDefinition","parameters":{"id":4800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4799,"mutability":"mutable","name":"slot","nameLocation":"1703:4:20","nodeType":"VariableDeclaration","scope":4811,"src":"1695:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4798,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:20"},"returnParameters":{"id":4804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4803,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4811,"src":"1732:15:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4796","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4802,"nodeType":"UserDefinedTypeName","pathNode":{"id":4801,"name":"Uint256SlotType","nameLocations":["1732:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4796,"src":"1732:15:20"},"referencedDeclaration":4796,"src":"1732:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4796","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:20"},"scope":4939,"src":"1676:123:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":4813,"name":"Int256SlotType","nameLocation":"1877:14:20","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:20","underlyingType":{"id":4812,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4827,"nodeType":"Block","src":"2038:49:20","statements":[{"expression":{"arguments":[{"id":4824,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4816,"src":"2075:4:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4822,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4813,"src":"2055:14:20","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$4813_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":4823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:20","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:20","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$4813_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":4825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4813","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":4821,"id":4826,"nodeType":"Return","src":"2048:32:20"}]},"documentation":{"id":4814,"nodeType":"StructuredDocumentation","src":"1909:53:20","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":4828,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:20","nodeType":"FunctionDefinition","parameters":{"id":4817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4816,"mutability":"mutable","name":"slot","nameLocation":"1993:4:20","nodeType":"VariableDeclaration","scope":4828,"src":"1985:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4815,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:20"},"returnParameters":{"id":4821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4820,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4828,"src":"2022:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4813","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4819,"nodeType":"UserDefinedTypeName","pathNode":{"id":4818,"name":"Int256SlotType","nameLocations":["2022:14:20"],"nodeType":"IdentifierPath","referencedDeclaration":4813,"src":"2022:14:20"},"referencedDeclaration":4813,"src":"2022:14:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4813","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:20"},"scope":4939,"src":"1967:120:20","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4838,"nodeType":"Block","src":"2242:112:20","statements":[{"AST":{"nativeSrc":"2304:44:20","nodeType":"YulBlock","src":"2304:44:20","statements":[{"nativeSrc":"2318:20:20","nodeType":"YulAssignment","src":"2318:20:20","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:20","nodeType":"YulIdentifier","src":"2333:4:20"}],"functionName":{"name":"tload","nativeSrc":"2327:5:20","nodeType":"YulIdentifier","src":"2327:5:20"},"nativeSrc":"2327:11:20","nodeType":"YulFunctionCall","src":"2327:11:20"},"variableNames":[{"name":"value","nativeSrc":"2318:5:20","nodeType":"YulIdentifier","src":"2318:5:20"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4832,"isOffset":false,"isSlot":false,"src":"2333:4:20","valueSize":1},{"declaration":4835,"isOffset":false,"isSlot":false,"src":"2318:5:20","valueSize":1}],"id":4837,"nodeType":"InlineAssembly","src":"2295:53:20"}]},"documentation":{"id":4829,"nodeType":"StructuredDocumentation","src":"2093:69:20","text":"@dev Load the value held at location `slot` in transient storage."},"id":4839,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:20","nodeType":"FunctionDefinition","parameters":{"id":4833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4832,"mutability":"mutable","name":"slot","nameLocation":"2198:4:20","nodeType":"VariableDeclaration","scope":4839,"src":"2182:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4745","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4831,"nodeType":"UserDefinedTypeName","pathNode":{"id":4830,"name":"AddressSlotType","nameLocations":["2182:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4745,"src":"2182:15:20"},"referencedDeclaration":4745,"src":"2182:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4745","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:20"},"returnParameters":{"id":4836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4835,"mutability":"mutable","name":"value","nameLocation":"2235:5:20","nodeType":"VariableDeclaration","scope":4839,"src":"2227:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4834,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:20"},"scope":4939,"src":"2167:187:20","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4849,"nodeType":"Block","src":"2490:111:20","statements":[{"AST":{"nativeSrc":"2552:43:20","nodeType":"YulBlock","src":"2552:43:20","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:20","nodeType":"YulIdentifier","src":"2573:4:20"},{"name":"value","nativeSrc":"2579:5:20","nodeType":"YulIdentifier","src":"2579:5:20"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:20","nodeType":"YulIdentifier","src":"2566:6:20"},"nativeSrc":"2566:19:20","nodeType":"YulFunctionCall","src":"2566:19:20"},"nativeSrc":"2566:19:20","nodeType":"YulExpressionStatement","src":"2566:19:20"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4843,"isOffset":false,"isSlot":false,"src":"2573:4:20","valueSize":1},{"declaration":4845,"isOffset":false,"isSlot":false,"src":"2579:5:20","valueSize":1}],"id":4848,"nodeType":"InlineAssembly","src":"2543:52:20"}]},"documentation":{"id":4840,"nodeType":"StructuredDocumentation","src":"2360:63:20","text":"@dev Store `value` at location `slot` in transient storage."},"id":4850,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:20","nodeType":"FunctionDefinition","parameters":{"id":4846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4843,"mutability":"mutable","name":"slot","nameLocation":"2460:4:20","nodeType":"VariableDeclaration","scope":4850,"src":"2444:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4745","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4842,"nodeType":"UserDefinedTypeName","pathNode":{"id":4841,"name":"AddressSlotType","nameLocations":["2444:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4745,"src":"2444:15:20"},"referencedDeclaration":4745,"src":"2444:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4745","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":4845,"mutability":"mutable","name":"value","nameLocation":"2474:5:20","nodeType":"VariableDeclaration","scope":4850,"src":"2466:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4844,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:20"},"returnParameters":{"id":4847,"nodeType":"ParameterList","parameters":[],"src":"2490:0:20"},"scope":4939,"src":"2428:173:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4860,"nodeType":"Block","src":"2753:112:20","statements":[{"AST":{"nativeSrc":"2815:44:20","nodeType":"YulBlock","src":"2815:44:20","statements":[{"nativeSrc":"2829:20:20","nodeType":"YulAssignment","src":"2829:20:20","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:20","nodeType":"YulIdentifier","src":"2844:4:20"}],"functionName":{"name":"tload","nativeSrc":"2838:5:20","nodeType":"YulIdentifier","src":"2838:5:20"},"nativeSrc":"2838:11:20","nodeType":"YulFunctionCall","src":"2838:11:20"},"variableNames":[{"name":"value","nativeSrc":"2829:5:20","nodeType":"YulIdentifier","src":"2829:5:20"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4854,"isOffset":false,"isSlot":false,"src":"2844:4:20","valueSize":1},{"declaration":4857,"isOffset":false,"isSlot":false,"src":"2829:5:20","valueSize":1}],"id":4859,"nodeType":"InlineAssembly","src":"2806:53:20"}]},"documentation":{"id":4851,"nodeType":"StructuredDocumentation","src":"2607:69:20","text":"@dev Load the value held at location `slot` in transient storage."},"id":4861,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:20","nodeType":"FunctionDefinition","parameters":{"id":4855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4854,"mutability":"mutable","name":"slot","nameLocation":"2712:4:20","nodeType":"VariableDeclaration","scope":4861,"src":"2696:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4853,"nodeType":"UserDefinedTypeName","pathNode":{"id":4852,"name":"BooleanSlotType","nameLocations":["2696:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4762,"src":"2696:15:20"},"referencedDeclaration":4762,"src":"2696:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:20"},"returnParameters":{"id":4858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4857,"mutability":"mutable","name":"value","nameLocation":"2746:5:20","nodeType":"VariableDeclaration","scope":4861,"src":"2741:10:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4856,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:20"},"scope":4939,"src":"2681:184:20","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4871,"nodeType":"Block","src":"2998:111:20","statements":[{"AST":{"nativeSrc":"3060:43:20","nodeType":"YulBlock","src":"3060:43:20","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:20","nodeType":"YulIdentifier","src":"3081:4:20"},{"name":"value","nativeSrc":"3087:5:20","nodeType":"YulIdentifier","src":"3087:5:20"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:20","nodeType":"YulIdentifier","src":"3074:6:20"},"nativeSrc":"3074:19:20","nodeType":"YulFunctionCall","src":"3074:19:20"},"nativeSrc":"3074:19:20","nodeType":"YulExpressionStatement","src":"3074:19:20"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4865,"isOffset":false,"isSlot":false,"src":"3081:4:20","valueSize":1},{"declaration":4867,"isOffset":false,"isSlot":false,"src":"3087:5:20","valueSize":1}],"id":4870,"nodeType":"InlineAssembly","src":"3051:52:20"}]},"documentation":{"id":4862,"nodeType":"StructuredDocumentation","src":"2871:63:20","text":"@dev Store `value` at location `slot` in transient storage."},"id":4872,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:20","nodeType":"FunctionDefinition","parameters":{"id":4868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4865,"mutability":"mutable","name":"slot","nameLocation":"2971:4:20","nodeType":"VariableDeclaration","scope":4872,"src":"2955:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4864,"nodeType":"UserDefinedTypeName","pathNode":{"id":4863,"name":"BooleanSlotType","nameLocations":["2955:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4762,"src":"2955:15:20"},"referencedDeclaration":4762,"src":"2955:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4762","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":4867,"mutability":"mutable","name":"value","nameLocation":"2982:5:20","nodeType":"VariableDeclaration","scope":4872,"src":"2977:10:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4866,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:20"},"returnParameters":{"id":4869,"nodeType":"ParameterList","parameters":[],"src":"2998:0:20"},"scope":4939,"src":"2939:170:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4882,"nodeType":"Block","src":"3264:112:20","statements":[{"AST":{"nativeSrc":"3326:44:20","nodeType":"YulBlock","src":"3326:44:20","statements":[{"nativeSrc":"3340:20:20","nodeType":"YulAssignment","src":"3340:20:20","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:20","nodeType":"YulIdentifier","src":"3355:4:20"}],"functionName":{"name":"tload","nativeSrc":"3349:5:20","nodeType":"YulIdentifier","src":"3349:5:20"},"nativeSrc":"3349:11:20","nodeType":"YulFunctionCall","src":"3349:11:20"},"variableNames":[{"name":"value","nativeSrc":"3340:5:20","nodeType":"YulIdentifier","src":"3340:5:20"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4876,"isOffset":false,"isSlot":false,"src":"3355:4:20","valueSize":1},{"declaration":4879,"isOffset":false,"isSlot":false,"src":"3340:5:20","valueSize":1}],"id":4881,"nodeType":"InlineAssembly","src":"3317:53:20"}]},"documentation":{"id":4873,"nodeType":"StructuredDocumentation","src":"3115:69:20","text":"@dev Load the value held at location `slot` in transient storage."},"id":4883,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:20","nodeType":"FunctionDefinition","parameters":{"id":4877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4876,"mutability":"mutable","name":"slot","nameLocation":"3220:4:20","nodeType":"VariableDeclaration","scope":4883,"src":"3204:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4779","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4875,"nodeType":"UserDefinedTypeName","pathNode":{"id":4874,"name":"Bytes32SlotType","nameLocations":["3204:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4779,"src":"3204:15:20"},"referencedDeclaration":4779,"src":"3204:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4779","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:20"},"returnParameters":{"id":4880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4879,"mutability":"mutable","name":"value","nameLocation":"3257:5:20","nodeType":"VariableDeclaration","scope":4883,"src":"3249:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4878,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:20"},"scope":4939,"src":"3189:187:20","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4893,"nodeType":"Block","src":"3512:111:20","statements":[{"AST":{"nativeSrc":"3574:43:20","nodeType":"YulBlock","src":"3574:43:20","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:20","nodeType":"YulIdentifier","src":"3595:4:20"},{"name":"value","nativeSrc":"3601:5:20","nodeType":"YulIdentifier","src":"3601:5:20"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:20","nodeType":"YulIdentifier","src":"3588:6:20"},"nativeSrc":"3588:19:20","nodeType":"YulFunctionCall","src":"3588:19:20"},"nativeSrc":"3588:19:20","nodeType":"YulExpressionStatement","src":"3588:19:20"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4887,"isOffset":false,"isSlot":false,"src":"3595:4:20","valueSize":1},{"declaration":4889,"isOffset":false,"isSlot":false,"src":"3601:5:20","valueSize":1}],"id":4892,"nodeType":"InlineAssembly","src":"3565:52:20"}]},"documentation":{"id":4884,"nodeType":"StructuredDocumentation","src":"3382:63:20","text":"@dev Store `value` at location `slot` in transient storage."},"id":4894,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:20","nodeType":"FunctionDefinition","parameters":{"id":4890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4887,"mutability":"mutable","name":"slot","nameLocation":"3482:4:20","nodeType":"VariableDeclaration","scope":4894,"src":"3466:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4779","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4886,"nodeType":"UserDefinedTypeName","pathNode":{"id":4885,"name":"Bytes32SlotType","nameLocations":["3466:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4779,"src":"3466:15:20"},"referencedDeclaration":4779,"src":"3466:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4779","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":4889,"mutability":"mutable","name":"value","nameLocation":"3496:5:20","nodeType":"VariableDeclaration","scope":4894,"src":"3488:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4888,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:20"},"returnParameters":{"id":4891,"nodeType":"ParameterList","parameters":[],"src":"3512:0:20"},"scope":4939,"src":"3450:173:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4904,"nodeType":"Block","src":"3778:112:20","statements":[{"AST":{"nativeSrc":"3840:44:20","nodeType":"YulBlock","src":"3840:44:20","statements":[{"nativeSrc":"3854:20:20","nodeType":"YulAssignment","src":"3854:20:20","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:20","nodeType":"YulIdentifier","src":"3869:4:20"}],"functionName":{"name":"tload","nativeSrc":"3863:5:20","nodeType":"YulIdentifier","src":"3863:5:20"},"nativeSrc":"3863:11:20","nodeType":"YulFunctionCall","src":"3863:11:20"},"variableNames":[{"name":"value","nativeSrc":"3854:5:20","nodeType":"YulIdentifier","src":"3854:5:20"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4898,"isOffset":false,"isSlot":false,"src":"3869:4:20","valueSize":1},{"declaration":4901,"isOffset":false,"isSlot":false,"src":"3854:5:20","valueSize":1}],"id":4903,"nodeType":"InlineAssembly","src":"3831:53:20"}]},"documentation":{"id":4895,"nodeType":"StructuredDocumentation","src":"3629:69:20","text":"@dev Load the value held at location `slot` in transient storage."},"id":4905,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:20","nodeType":"FunctionDefinition","parameters":{"id":4899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4898,"mutability":"mutable","name":"slot","nameLocation":"3734:4:20","nodeType":"VariableDeclaration","scope":4905,"src":"3718:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4796","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4897,"nodeType":"UserDefinedTypeName","pathNode":{"id":4896,"name":"Uint256SlotType","nameLocations":["3718:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4796,"src":"3718:15:20"},"referencedDeclaration":4796,"src":"3718:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4796","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:20"},"returnParameters":{"id":4902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4901,"mutability":"mutable","name":"value","nameLocation":"3771:5:20","nodeType":"VariableDeclaration","scope":4905,"src":"3763:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4900,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:20"},"scope":4939,"src":"3703:187:20","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4915,"nodeType":"Block","src":"4026:111:20","statements":[{"AST":{"nativeSrc":"4088:43:20","nodeType":"YulBlock","src":"4088:43:20","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:20","nodeType":"YulIdentifier","src":"4109:4:20"},{"name":"value","nativeSrc":"4115:5:20","nodeType":"YulIdentifier","src":"4115:5:20"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:20","nodeType":"YulIdentifier","src":"4102:6:20"},"nativeSrc":"4102:19:20","nodeType":"YulFunctionCall","src":"4102:19:20"},"nativeSrc":"4102:19:20","nodeType":"YulExpressionStatement","src":"4102:19:20"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4909,"isOffset":false,"isSlot":false,"src":"4109:4:20","valueSize":1},{"declaration":4911,"isOffset":false,"isSlot":false,"src":"4115:5:20","valueSize":1}],"id":4914,"nodeType":"InlineAssembly","src":"4079:52:20"}]},"documentation":{"id":4906,"nodeType":"StructuredDocumentation","src":"3896:63:20","text":"@dev Store `value` at location `slot` in transient storage."},"id":4916,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:20","nodeType":"FunctionDefinition","parameters":{"id":4912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4909,"mutability":"mutable","name":"slot","nameLocation":"3996:4:20","nodeType":"VariableDeclaration","scope":4916,"src":"3980:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4796","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4908,"nodeType":"UserDefinedTypeName","pathNode":{"id":4907,"name":"Uint256SlotType","nameLocations":["3980:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":4796,"src":"3980:15:20"},"referencedDeclaration":4796,"src":"3980:15:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4796","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":4911,"mutability":"mutable","name":"value","nameLocation":"4010:5:20","nodeType":"VariableDeclaration","scope":4916,"src":"4002:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4910,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:20"},"returnParameters":{"id":4913,"nodeType":"ParameterList","parameters":[],"src":"4026:0:20"},"scope":4939,"src":"3964:173:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4926,"nodeType":"Block","src":"4290:112:20","statements":[{"AST":{"nativeSrc":"4352:44:20","nodeType":"YulBlock","src":"4352:44:20","statements":[{"nativeSrc":"4366:20:20","nodeType":"YulAssignment","src":"4366:20:20","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:20","nodeType":"YulIdentifier","src":"4381:4:20"}],"functionName":{"name":"tload","nativeSrc":"4375:5:20","nodeType":"YulIdentifier","src":"4375:5:20"},"nativeSrc":"4375:11:20","nodeType":"YulFunctionCall","src":"4375:11:20"},"variableNames":[{"name":"value","nativeSrc":"4366:5:20","nodeType":"YulIdentifier","src":"4366:5:20"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4920,"isOffset":false,"isSlot":false,"src":"4381:4:20","valueSize":1},{"declaration":4923,"isOffset":false,"isSlot":false,"src":"4366:5:20","valueSize":1}],"id":4925,"nodeType":"InlineAssembly","src":"4343:53:20"}]},"documentation":{"id":4917,"nodeType":"StructuredDocumentation","src":"4143:69:20","text":"@dev Load the value held at location `slot` in transient storage."},"id":4927,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:20","nodeType":"FunctionDefinition","parameters":{"id":4921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4920,"mutability":"mutable","name":"slot","nameLocation":"4247:4:20","nodeType":"VariableDeclaration","scope":4927,"src":"4232:19:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4813","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4919,"nodeType":"UserDefinedTypeName","pathNode":{"id":4918,"name":"Int256SlotType","nameLocations":["4232:14:20"],"nodeType":"IdentifierPath","referencedDeclaration":4813,"src":"4232:14:20"},"referencedDeclaration":4813,"src":"4232:14:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4813","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:20"},"returnParameters":{"id":4924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4923,"mutability":"mutable","name":"value","nameLocation":"4283:5:20","nodeType":"VariableDeclaration","scope":4927,"src":"4276:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4922,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:20","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:20"},"scope":4939,"src":"4217:185:20","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4937,"nodeType":"Block","src":"4536:111:20","statements":[{"AST":{"nativeSrc":"4598:43:20","nodeType":"YulBlock","src":"4598:43:20","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:20","nodeType":"YulIdentifier","src":"4619:4:20"},{"name":"value","nativeSrc":"4625:5:20","nodeType":"YulIdentifier","src":"4625:5:20"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:20","nodeType":"YulIdentifier","src":"4612:6:20"},"nativeSrc":"4612:19:20","nodeType":"YulFunctionCall","src":"4612:19:20"},"nativeSrc":"4612:19:20","nodeType":"YulExpressionStatement","src":"4612:19:20"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4931,"isOffset":false,"isSlot":false,"src":"4619:4:20","valueSize":1},{"declaration":4933,"isOffset":false,"isSlot":false,"src":"4625:5:20","valueSize":1}],"id":4936,"nodeType":"InlineAssembly","src":"4589:52:20"}]},"documentation":{"id":4928,"nodeType":"StructuredDocumentation","src":"4408:63:20","text":"@dev Store `value` at location `slot` in transient storage."},"id":4938,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:20","nodeType":"FunctionDefinition","parameters":{"id":4934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4931,"mutability":"mutable","name":"slot","nameLocation":"4507:4:20","nodeType":"VariableDeclaration","scope":4938,"src":"4492:19:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4813","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4930,"nodeType":"UserDefinedTypeName","pathNode":{"id":4929,"name":"Int256SlotType","nameLocations":["4492:14:20"],"nodeType":"IdentifierPath","referencedDeclaration":4813,"src":"4492:14:20"},"referencedDeclaration":4813,"src":"4492:14:20","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4813","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":4933,"mutability":"mutable","name":"value","nameLocation":"4520:5:20","nodeType":"VariableDeclaration","scope":4938,"src":"4513:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4932,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:20","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:20"},"returnParameters":{"id":4935,"nodeType":"ParameterList","parameters":[],"src":"4536:0:20"},"scope":4939,"src":"4476:171:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4940,"src":"278:4371:20","usedErrors":[],"usedEvents":[]}],"src":"33:4617:20"},"id":20},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","exportedSymbols":{"Authentication":[2669],"CommonAuthentication":[5114],"IVault":[829]},"id":5115,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4941,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":4943,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5115,"sourceUnit":830,"src":"72:81:21","symbolAliases":[{"foreign":{"id":4942,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"81:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":4945,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5115,"sourceUnit":2670,"src":"154:103:21","symbolAliases":[{"foreign":{"id":4944,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2669,"src":"163:14:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4947,"name":"Authentication","nameLocations":["390:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":2669,"src":"390:14:21"},"id":4948,"nodeType":"InheritanceSpecifier","src":"390:14:21"}],"canonicalName":"CommonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":4946,"nodeType":"StructuredDocumentation","src":"259:89:21","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":5114,"linearizedBaseContracts":[5114,2669,47],"name":"CommonAuthentication","nameLocation":"366:20:21","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4951,"mutability":"immutable","name":"_vault","nameLocation":"436:6:21","nodeType":"VariableDeclaration","scope":5114,"src":"411:31:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":4950,"nodeType":"UserDefinedTypeName","pathNode":{"id":4949,"name":"IVault","nameLocations":["411:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"411:6:21"},"referencedDeclaration":829,"src":"411:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":4970,"nodeType":"Block","src":"600:161:21","statements":[{"assignments":[4957],"declarations":[{"constant":false,"id":4957,"mutability":"mutable","name":"roleAddress","nameLocation":"618:11:21","nodeType":"VariableDeclaration","scope":4970,"src":"610:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4956,"name":"address","nodeType":"ElementaryTypeName","src":"610:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":4963,"initialValue":{"expression":{"arguments":[{"id":4960,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4954,"src":"659:4:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4958,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"632:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":4959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"639:19:21","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":2060,"src":"632:26:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$2395_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":4961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"632:32:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":4962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"665:14:21","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":2392,"src":"632:47:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"610:69:21"},{"expression":{"arguments":[{"id":4965,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4954,"src":"725:4:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4966,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4957,"src":"731:11:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":4964,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5082,"src":"689:35:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":4967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"689:54:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4968,"nodeType":"ExpressionStatement","src":"689:54:21"},{"id":4969,"nodeType":"PlaceholderStatement","src":"753:1:21"}]},"documentation":{"id":4952,"nodeType":"StructuredDocumentation","src":"449:92:21","text":"@notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance."},"id":4971,"name":"onlySwapFeeManagerOrGovernance","nameLocation":"555:30:21","nodeType":"ModifierDefinition","parameters":{"id":4955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4954,"mutability":"mutable","name":"pool","nameLocation":"594:4:21","nodeType":"VariableDeclaration","scope":4971,"src":"586:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4953,"name":"address","nodeType":"ElementaryTypeName","src":"586:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"585:14:21"},"src":"546:215:21","virtual":false,"visibility":"internal"},{"body":{"id":4986,"nodeType":"Block","src":"862:31:21","statements":[{"expression":{"id":4984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4982,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"872:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4983,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4974,"src":"881:5:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"src":"872:14:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":4985,"nodeType":"ExpressionStatement","src":"872:14:21"}]},"id":4987,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4979,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4976,"src":"839:21:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":4980,"kind":"baseConstructorSpecifier","modifierName":{"id":4978,"name":"Authentication","nameLocations":["824:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":2669,"src":"824:14:21"},"nodeType":"ModifierInvocation","src":"824:37:21"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4974,"mutability":"mutable","name":"vault","nameLocation":"786:5:21","nodeType":"VariableDeclaration","scope":4987,"src":"779:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":4973,"nodeType":"UserDefinedTypeName","pathNode":{"id":4972,"name":"IVault","nameLocations":["779:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"779:6:21"},"referencedDeclaration":829,"src":"779:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":4976,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"801:21:21","nodeType":"VariableDeclaration","scope":4987,"src":"793:29:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4975,"name":"bytes32","nodeType":"ElementaryTypeName","src":"793:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"778:45:21"},"returnParameters":{"id":4981,"nodeType":"ParameterList","parameters":[],"src":"862:0:21"},"scope":5114,"src":"767:126:21","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4995,"nodeType":"Block","src":"951:30:21","statements":[{"expression":{"id":4993,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"968:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"functionReturnParameters":4992,"id":4994,"nodeType":"Return","src":"961:13:21"}]},"id":4996,"implemented":true,"kind":"function","modifiers":[],"name":"_getVault","nameLocation":"908:9:21","nodeType":"FunctionDefinition","parameters":{"id":4988,"nodeType":"ParameterList","parameters":[],"src":"917:2:21"},"returnParameters":{"id":4992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4996,"src":"943:6:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":4990,"nodeType":"UserDefinedTypeName","pathNode":{"id":4989,"name":"IVault","nameLocations":["943:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"943:6:21"},"referencedDeclaration":829,"src":"943:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"942:8:21"},"scope":5114,"src":"899:82:21","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[2668],"body":{"id":5018,"nodeType":"Block","src":"1163:88:21","statements":[{"expression":{"arguments":[{"id":5010,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4998,"src":"1214:8:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":5011,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5000,"src":"1224:4:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5014,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1238:4:21","typeDescriptions":{"typeIdentifier":"t_contract$_CommonAuthentication_$5114","typeString":"contract CommonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CommonAuthentication_$5114","typeString":"contract CommonAuthentication"}],"id":5013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1230:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5012,"name":"address","nodeType":"ElementaryTypeName","src":"1230:7:21","typeDescriptions":{}}},"id":5015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1230:13:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5006,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"1180:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":5007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1187:13:21","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2143,"src":"1180:20:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$251_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":5008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1180:22:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}},"id":5009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1203:10:21","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":250,"src":"1180:33:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":5016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1180:64:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5005,"id":5017,"nodeType":"Return","src":"1173:71:21"}]},"id":5019,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1081:11:21","nodeType":"FunctionDefinition","overrides":{"id":5002,"nodeType":"OverrideSpecifier","overrides":[],"src":"1139:8:21"},"parameters":{"id":5001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4998,"mutability":"mutable","name":"actionId","nameLocation":"1101:8:21","nodeType":"VariableDeclaration","scope":5019,"src":"1093:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4997,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1093:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5000,"mutability":"mutable","name":"user","nameLocation":"1119:4:21","nodeType":"VariableDeclaration","scope":5019,"src":"1111:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4999,"name":"address","nodeType":"ElementaryTypeName","src":"1111:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1092:32:21"},"returnParameters":{"id":5005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5004,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5019,"src":"1157:4:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5003,"name":"bool","nodeType":"ElementaryTypeName","src":"1157:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1156:6:21"},"scope":5114,"src":"1072:179:21","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5039,"nodeType":"Block","src":"1357:83:21","statements":[{"expression":{"arguments":[{"id":5034,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5021,"src":"1408:8:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":5035,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"1418:7:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5036,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5025,"src":"1427:5:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5030,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"1374:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":5031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1381:13:21","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2143,"src":"1374:20:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$251_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":5032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1374:22:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}},"id":5033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1397:10:21","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":250,"src":"1374:33:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":5037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1374:59:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5029,"id":5038,"nodeType":"Return","src":"1367:66:21"}]},"id":5040,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1266:11:21","nodeType":"FunctionDefinition","parameters":{"id":5026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5021,"mutability":"mutable","name":"actionId","nameLocation":"1286:8:21","nodeType":"VariableDeclaration","scope":5040,"src":"1278:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5020,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1278:7:21","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5023,"mutability":"mutable","name":"account","nameLocation":"1304:7:21","nodeType":"VariableDeclaration","scope":5040,"src":"1296:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5022,"name":"address","nodeType":"ElementaryTypeName","src":"1296:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5025,"mutability":"mutable","name":"where","nameLocation":"1321:5:21","nodeType":"VariableDeclaration","scope":5040,"src":"1313:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5024,"name":"address","nodeType":"ElementaryTypeName","src":"1313:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1277:50:21"},"returnParameters":{"id":5029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5040,"src":"1351:4:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5027,"name":"bool","nodeType":"ElementaryTypeName","src":"1351:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1350:6:21"},"scope":5114,"src":"1257:183:21","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5081,"nodeType":"Block","src":"1647:339:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5048,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5045,"src":"1661:11:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1684:1:21","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1676:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5049,"name":"address","nodeType":"ElementaryTypeName","src":"1676:7:21","typeDescriptions":{}}},"id":5052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1676:10:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1661:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5071,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1903:3:21","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1907:6:21","memberName":"sender","nodeType":"MemberAccess","src":"1903:10:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5073,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5045,"src":"1917:11:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1903:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5079,"nodeType":"IfStatement","src":"1899:81:21","trueBody":{"id":5078,"nodeType":"Block","src":"1930:50:21","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5075,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1951:16:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1951:18:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5077,"nodeType":"RevertStatement","src":"1944:25:21"}]}},"id":5080,"nodeType":"IfStatement","src":"1657:323:21","trueBody":{"id":5070,"nodeType":"Block","src":"1688:205:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":5056,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1786:3:21","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1790:3:21","memberName":"sig","nodeType":"MemberAccess","src":"1786:7:21","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":5055,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2658,"src":"1774:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":5058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1774:20:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":5059,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1796:3:21","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1800:6:21","memberName":"sender","nodeType":"MemberAccess","src":"1796:10:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5061,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5043,"src":"1808:5:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5054,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[5019,5040],"referencedDeclaration":5040,"src":"1762:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":5062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1818:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1762:61:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5069,"nodeType":"IfStatement","src":"1758:125:21","trueBody":{"id":5068,"nodeType":"Block","src":"1825:58:21","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5065,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1850:16:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1850:18:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5067,"nodeType":"RevertStatement","src":"1843:25:21"}]}}]}}]},"documentation":{"id":5041,"nodeType":"StructuredDocumentation","src":"1446:101:21","text":"@dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0)."},"id":5082,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"1561:35:21","nodeType":"FunctionDefinition","parameters":{"id":5046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5043,"mutability":"mutable","name":"where","nameLocation":"1605:5:21","nodeType":"VariableDeclaration","scope":5082,"src":"1597:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5042,"name":"address","nodeType":"ElementaryTypeName","src":"1597:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5045,"mutability":"mutable","name":"roleAccount","nameLocation":"1620:11:21","nodeType":"VariableDeclaration","scope":5082,"src":"1612:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5044,"name":"address","nodeType":"ElementaryTypeName","src":"1612:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1596:36:21"},"returnParameters":{"id":5047,"nodeType":"ParameterList","parameters":[],"src":"1647:0:21"},"scope":5114,"src":"1552:434:21","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5112,"nodeType":"Block","src":"2185:352:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5090,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2288:3:21","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2292:6:21","memberName":"sender","nodeType":"MemberAccess","src":"2288:10:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5092,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5087,"src":"2302:11:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2288:25:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5111,"nodeType":"IfStatement","src":"2284:180:21","trueBody":{"id":5110,"nodeType":"Block","src":"2315:149:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":5096,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2357:3:21","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2361:3:21","memberName":"sig","nodeType":"MemberAccess","src":"2357:7:21","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":5095,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2658,"src":"2345:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":5098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2345:20:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":5099,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2367:3:21","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2371:6:21","memberName":"sender","nodeType":"MemberAccess","src":"2367:10:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5101,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5085,"src":"2379:5:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5094,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[5019,5040],"referencedDeclaration":5040,"src":"2333:11:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":5102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2333:52:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2389:5:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2333:61:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5109,"nodeType":"IfStatement","src":"2329:125:21","trueBody":{"id":5108,"nodeType":"Block","src":"2396:58:21","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5105,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"2421:16:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2421:18:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5107,"nodeType":"RevertStatement","src":"2414:25:21"}]}}]}}]},"documentation":{"id":5083,"nodeType":"StructuredDocumentation","src":"1992:102:21","text":"@dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive)."},"id":5113,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByRole","nameLocation":"2108:26:21","nodeType":"FunctionDefinition","parameters":{"id":5088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5085,"mutability":"mutable","name":"where","nameLocation":"2143:5:21","nodeType":"VariableDeclaration","scope":5113,"src":"2135:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5084,"name":"address","nodeType":"ElementaryTypeName","src":"2135:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5087,"mutability":"mutable","name":"roleAccount","nameLocation":"2158:11:21","nodeType":"VariableDeclaration","scope":5113,"src":"2150:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5086,"name":"address","nodeType":"ElementaryTypeName","src":"2150:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2134:36:21"},"returnParameters":{"id":5089,"nodeType":"ParameterList","parameters":[],"src":"2185:0:21"},"scope":5114,"src":"2099:438:21","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":5115,"src":"348:2191:21","usedErrors":[38],"usedEvents":[]}],"src":"46:2494:21"},"id":21},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[2586],"FixedPoint":[3301],"IERC20":[7165],"IProtocolFeeController":[791],"IVault":[829],"IVaultErrors":[1486],"MAX_FEE_PERCENTAGE":[2589],"PoolRoleAccounts":[2395],"ProtocolFeeController":[6809],"ReentrancyGuardTransient":[4726],"SafeCast":[9525],"SafeERC20":[7517],"SingletonAuthentication":[6868],"VaultGuard":[6917]},"id":6810,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5116,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:22"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":5118,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":7518,"src":"72:84:22","symbolAliases":[{"foreign":{"id":5117,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7517,"src":"81:9:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":5120,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":9526,"src":"157:75:22","symbolAliases":[{"foreign":{"id":5119,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9525,"src":"166:8:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":5122,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":7166,"src":"233:72:22","symbolAliases":[{"foreign":{"id":5121,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"242:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":5124,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":792,"src":"307:113:22","symbolAliases":[{"foreign":{"id":5123,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":791,"src":"316:22:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":5126,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":1487,"src":"421:93:22","symbolAliases":[{"foreign":{"id":5125,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1486,"src":"430:12:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":5128,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":830,"src":"515:81:22","symbolAliases":[{"foreign":{"id":5127,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"524:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":5132,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":2590,"src":"597:147:22","symbolAliases":[{"foreign":{"id":5129,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2586,"src":"610:18:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":5130,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2589,"src":"634:18:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":5131,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2395,"src":"658:16:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":5134,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":4727,"src":"746:132:22","symbolAliases":[{"foreign":{"id":5133,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4726,"src":"759:24:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":5136,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":3302,"src":"879:92:22","symbolAliases":[{"foreign":{"id":5135,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3301,"src":"888:10:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":5138,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":6869,"src":"973:72:22","symbolAliases":[{"foreign":{"id":5137,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"982:23:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":5140,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6810,"sourceUnit":6918,"src":"1046:46:22","symbolAliases":[{"foreign":{"id":5139,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6917,"src":"1055:10:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5142,"name":"IProtocolFeeController","nameLocations":["3158:22:22"],"nodeType":"IdentifierPath","referencedDeclaration":791,"src":"3158:22:22"},"id":5143,"nodeType":"InheritanceSpecifier","src":"3158:22:22"},{"baseName":{"id":5144,"name":"SingletonAuthentication","nameLocations":["3186:23:22"],"nodeType":"IdentifierPath","referencedDeclaration":6868,"src":"3186:23:22"},"id":5145,"nodeType":"InheritanceSpecifier","src":"3186:23:22"},{"baseName":{"id":5146,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:22"],"nodeType":"IdentifierPath","referencedDeclaration":4726,"src":"3215:24:22"},"id":5147,"nodeType":"InheritanceSpecifier","src":"3215:24:22"},{"baseName":{"id":5148,"name":"VaultGuard","nameLocations":["3245:10:22"],"nodeType":"IdentifierPath","referencedDeclaration":6917,"src":"3245:10:22"},"id":5149,"nodeType":"InheritanceSpecifier","src":"3245:10:22"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":5141,"nodeType":"StructuredDocumentation","src":"1094:2025:22","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":6809,"linearizedBaseContracts":[6809,6917,4726,6868,5114,2669,47,791],"name":"ProtocolFeeController","nameLocation":"3129:21:22","nodeType":"ContractDefinition","nodes":[{"global":false,"id":5152,"libraryName":{"id":5150,"name":"FixedPoint","nameLocations":["3268:10:22"],"nodeType":"IdentifierPath","referencedDeclaration":3301,"src":"3268:10:22"},"nodeType":"UsingForDirective","src":"3262:29:22","typeName":{"id":5151,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":5156,"libraryName":{"id":5153,"name":"SafeERC20","nameLocations":["3302:9:22"],"nodeType":"IdentifierPath","referencedDeclaration":7517,"src":"3302:9:22"},"nodeType":"UsingForDirective","src":"3296:27:22","typeName":{"id":5155,"nodeType":"UserDefinedTypeName","pathNode":{"id":5154,"name":"IERC20","nameLocations":["3316:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3316:6:22"},"referencedDeclaration":7165,"src":"3316:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}},{"global":false,"id":5158,"libraryName":{"id":5157,"name":"SafeCast","nameLocations":["3334:8:22"],"nodeType":"IdentifierPath","referencedDeclaration":9525,"src":"3334:8:22"},"nodeType":"UsingForDirective","src":"3328:21:22"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":5161,"members":[{"id":5159,"name":"SWAP","nameLocation":"3386:4:22","nodeType":"EnumValue","src":"3386:4:22"},{"id":5160,"name":"YIELD","nameLocation":"3400:5:22","nodeType":"EnumValue","src":"3400:5:22"}],"name":"ProtocolFeeType","nameLocation":"3360:15:22","nodeType":"EnumDefinition","src":"3355:56:22"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":5162,"nodeType":"StructuredDocumentation","src":"3417:1063:22","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":5167,"members":[{"constant":false,"id":5164,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:22","nodeType":"VariableDeclaration","scope":5167,"src":"4516:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":5163,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":5166,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:22","nodeType":"VariableDeclaration","scope":5167,"src":"4546:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5165,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:22","nodeType":"StructDefinition","scope":6809,"src":"4485:83:22","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":5170,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:22","nodeType":"VariableDeclaration","scope":6809,"src":"4661:64:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5168,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":5169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:22","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":5173,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:22","nodeType":"VariableDeclaration","scope":6809,"src":"4785:65:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5171,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":5172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:22","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":5176,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:22","nodeType":"VariableDeclaration","scope":6809,"src":"4922:62:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5174,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":5175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:22","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":5178,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:22","nodeType":"VariableDeclaration","scope":6809,"src":"5035:48:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5177,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":5180,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:22","nodeType":"VariableDeclaration","scope":6809,"src":"5124:49:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5179,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":5185,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5356:31:22","nodeType":"VariableDeclaration","scope":6809,"src":"5294:93:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":5184,"keyName":"pool","keyNameLocation":"5310:4:22","keyType":{"id":5181,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:52:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5332:13:22","valueType":{"id":5183,"nodeType":"UserDefinedTypeName","pathNode":{"id":5182,"name":"PoolFeeConfig","nameLocations":["5318:13:22"],"nodeType":"IdentifierPath","referencedDeclaration":5167,"src":"5318:13:22"},"referencedDeclaration":5167,"src":"5318:13:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":5190,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5572:32:22","nodeType":"VariableDeclaration","scope":6809,"src":"5509:95:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":5189,"keyName":"pool","keyNameLocation":"5525:4:22","keyType":{"id":5186,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5509:53:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5547:14:22","valueType":{"id":5188,"nodeType":"UserDefinedTypeName","pathNode":{"id":5187,"name":"PoolFeeConfig","nameLocations":["5533:13:22"],"nodeType":"IdentifierPath","referencedDeclaration":5167,"src":"5533:13:22"},"referencedDeclaration":5167,"src":"5533:13:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":5194,"mutability":"mutable","name":"_registeredPools","nameLocation":"5777:16:22","nodeType":"VariableDeclaration","scope":6809,"src":"5725:68:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":5193,"keyName":"pool","keyNameLocation":"5741:4:22","keyType":{"id":5191,"name":"address","nodeType":"ElementaryTypeName","src":"5733:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5725:42:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5754:12:22","valueType":{"id":5192,"name":"bool","nodeType":"ElementaryTypeName","src":"5749:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":5198,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:22","nodeType":"VariableDeclaration","scope":6809,"src":"5856:91:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":5197,"keyName":"pool","keyNameLocation":"5872:4:22","keyType":{"id":5195,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:22","valueType":{"id":5196,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":5202,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:22","nodeType":"VariableDeclaration","scope":6809,"src":"6011:93:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":5201,"keyName":"pool","keyNameLocation":"6027:4:22","keyType":{"id":5199,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:22","valueType":{"id":5200,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":5209,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:22","nodeType":"VariableDeclaration","scope":6809,"src":"6209:100:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":5208,"keyName":"pool","keyNameLocation":"6225:4:22","keyType":{"id":5203,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":5207,"keyName":"poolToken","keyNameLocation":"6248:9:22","keyType":{"id":5205,"nodeType":"UserDefinedTypeName","pathNode":{"id":5204,"name":"IERC20","nameLocations":["6241:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"6241:6:22"},"referencedDeclaration":7165,"src":"6241:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:22","valueType":{"id":5206,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":5216,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:22","nodeType":"VariableDeclaration","scope":6809,"src":"6424:103:22","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":5215,"keyName":"pool","keyNameLocation":"6440:4:22","keyType":{"id":5210,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":5214,"keyName":"poolToken","keyNameLocation":"6463:9:22","keyType":{"id":5212,"nodeType":"UserDefinedTypeName","pathNode":{"id":5211,"name":"IERC20","nameLocations":["6456:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"6456:6:22"},"referencedDeclaration":7165,"src":"6456:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:22","valueType":{"id":5213,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":5217,"nodeType":"StructuredDocumentation","src":"6534:279:22","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":5221,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:22","nodeType":"ErrorDefinition","parameters":{"id":5220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5219,"mutability":"mutable","name":"pool","nameLocation":"6854:4:22","nodeType":"VariableDeclaration","scope":5221,"src":"6846:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5218,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:22"},"src":"6818:42:22"},{"documentation":{"id":5222,"nodeType":"StructuredDocumentation","src":"6866:53:22","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":5224,"name":"InvalidMigrationSource","nameLocation":"6930:22:22","nodeType":"ErrorDefinition","parameters":{"id":5223,"nodeType":"ParameterList","parameters":[],"src":"6952:2:22"},"src":"6924:31:22"},{"body":{"id":5233,"nodeType":"Block","src":"7051:60:22","statements":[{"expression":{"arguments":[{"id":5229,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5226,"src":"7088:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5228,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6030,"src":"7061:26:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":5230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5231,"nodeType":"ExpressionStatement","src":"7061:32:22"},{"id":5232,"nodeType":"PlaceholderStatement","src":"7103:1:22"}]},"id":5234,"name":"onlyPoolCreator","nameLocation":"7021:15:22","nodeType":"ModifierDefinition","parameters":{"id":5227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5226,"mutability":"mutable","name":"pool","nameLocation":"7045:4:22","nodeType":"VariableDeclaration","scope":5234,"src":"7037:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5225,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:22"},"src":"7012:99:22","virtual":false,"visibility":"internal"},{"body":{"id":5251,"nodeType":"Block","src":"7234:207:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5238,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"7248:20:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":5239,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5170,"src":"7271:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5245,"nodeType":"IfStatement","src":"7244:127:22","trueBody":{"id":5244,"nodeType":"Block","src":"7305:66:22","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5241,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":572,"src":"7326:32:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5243,"nodeType":"RevertStatement","src":"7319:41:22"}]}},{"expression":{"arguments":[{"id":5247,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"7402:20:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5246,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"7380:21:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":5248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5249,"nodeType":"ExpressionStatement","src":"7380:43:22"},{"id":5250,"nodeType":"PlaceholderStatement","src":"7433:1:22"}]},"id":5252,"name":"withValidSwapFee","nameLocation":"7187:16:22","nodeType":"ModifierDefinition","parameters":{"id":5237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5236,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:22","nodeType":"VariableDeclaration","scope":5252,"src":"7204:28:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5235,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:22"},"src":"7178:263:22","virtual":false,"visibility":"internal"},{"body":{"id":5269,"nodeType":"Block","src":"7567:211:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5256,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5254,"src":"7581:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":5257,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5173,"src":"7605:33:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5263,"nodeType":"IfStatement","src":"7577:130:22","trueBody":{"id":5262,"nodeType":"Block","src":"7640:67:22","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5259,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":575,"src":"7661:33:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5261,"nodeType":"RevertStatement","src":"7654:42:22"}]}},{"expression":{"arguments":[{"id":5265,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5254,"src":"7738:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5264,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"7716:21:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":5266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5267,"nodeType":"ExpressionStatement","src":"7716:44:22"},{"id":5268,"nodeType":"PlaceholderStatement","src":"7770:1:22"}]},"id":5270,"name":"withValidYieldFee","nameLocation":"7518:17:22","nodeType":"ModifierDefinition","parameters":{"id":5255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5254,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:22","nodeType":"VariableDeclaration","scope":5270,"src":"7536:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5253,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:22"},"src":"7509:269:22","virtual":false,"visibility":"internal"},{"body":{"id":5283,"nodeType":"Block","src":"7854:154:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5274,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5272,"src":"7868:27:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":5275,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"7898:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5281,"nodeType":"IfStatement","src":"7864:127:22","trueBody":{"id":5280,"nodeType":"Block","src":"7926:65:22","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5277,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":590,"src":"7947:31:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5279,"nodeType":"RevertStatement","src":"7940:40:22"}]}},{"id":5282,"nodeType":"PlaceholderStatement","src":"8000:1:22"}]},"id":5284,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:22","nodeType":"ModifierDefinition","parameters":{"id":5273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5272,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:22","nodeType":"VariableDeclaration","scope":5284,"src":"7817:35:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5271,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:22"},"src":"7784:224:22","virtual":false,"visibility":"internal"},{"body":{"id":5293,"nodeType":"Block","src":"8145:54:22","statements":[{"expression":{"arguments":[{"id":5289,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5286,"src":"8176:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5288,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5347,"src":"8155:20:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5291,"nodeType":"ExpressionStatement","src":"8155:26:22"},{"id":5292,"nodeType":"PlaceholderStatement","src":"8191:1:22"}]},"id":5294,"name":"withLatestFees","nameLocation":"8116:14:22","nodeType":"ModifierDefinition","parameters":{"id":5287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5286,"mutability":"mutable","name":"pool","nameLocation":"8139:4:22","nodeType":"VariableDeclaration","scope":5294,"src":"8131:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5285,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:22"},"src":"8107:92:22","virtual":false,"visibility":"internal"},{"body":{"id":5318,"nodeType":"Block","src":"8394:163:22","statements":[{"expression":{"arguments":[{"id":5311,"name":"initialGlobalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5299,"src":"8440:30:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5310,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6299,"src":"8404:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8404:67:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5313,"nodeType":"ExpressionStatement","src":"8404:67:22"},{"expression":{"arguments":[{"id":5315,"name":"initialGlobalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5301,"src":"8518:31:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5314,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6329,"src":"8481:36:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8481:69:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5317,"nodeType":"ExpressionStatement","src":"8481:69:22"}]},"id":5319,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":5304,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5297,"src":"8367:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}}],"id":5305,"kind":"baseConstructorSpecifier","modifierName":{"id":5303,"name":"SingletonAuthentication","nameLocations":["8343:23:22"],"nodeType":"IdentifierPath","referencedDeclaration":6868,"src":"8343:23:22"},"nodeType":"ModifierInvocation","src":"8343:31:22"},{"arguments":[{"id":5307,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5297,"src":"8386:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}}],"id":5308,"kind":"baseConstructorSpecifier","modifierName":{"id":5306,"name":"VaultGuard","nameLocations":["8375:10:22"],"nodeType":"IdentifierPath","referencedDeclaration":6917,"src":"8375:10:22"},"nodeType":"ModifierInvocation","src":"8375:18:22"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":5302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5297,"mutability":"mutable","name":"vault_","nameLocation":"8233:6:22","nodeType":"VariableDeclaration","scope":5319,"src":"8226:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":5296,"nodeType":"UserDefinedTypeName","pathNode":{"id":5295,"name":"IVault","nameLocations":["8226:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"8226:6:22"},"referencedDeclaration":829,"src":"8226:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":5299,"mutability":"mutable","name":"initialGlobalSwapFeePercentage","nameLocation":"8257:30:22","nodeType":"VariableDeclaration","scope":5319,"src":"8249:38:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5298,"name":"uint256","nodeType":"ElementaryTypeName","src":"8249:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5301,"mutability":"mutable","name":"initialGlobalYieldFeePercentage","nameLocation":"8305:31:22","nodeType":"VariableDeclaration","scope":5319,"src":"8297:39:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5300,"name":"uint256","nodeType":"ElementaryTypeName","src":"8297:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8216:126:22"},"returnParameters":{"id":5309,"nodeType":"ParameterList","parameters":[],"src":"8394:0:22"},"scope":6809,"src":"8205:352:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[597],"body":{"id":5328,"nodeType":"Block","src":"8654:30:22","statements":[{"expression":{"id":5326,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"8671:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"functionReturnParameters":5325,"id":5327,"nodeType":"Return","src":"8664:13:22"}]},"documentation":{"id":5320,"nodeType":"StructuredDocumentation","src":"8563:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":5329,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8615:5:22","nodeType":"FunctionDefinition","parameters":{"id":5321,"nodeType":"ParameterList","parameters":[],"src":"8620:2:22"},"returnParameters":{"id":5325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5324,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5329,"src":"8646:6:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":5323,"nodeType":"UserDefinedTypeName","pathNode":{"id":5322,"name":"IVault","nameLocations":["8646:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"8646:6:22"},"referencedDeclaration":829,"src":"8646:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8645:8:22"},"scope":6809,"src":"8606:78:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[603],"body":{"id":5346,"nodeType":"Block","src":"8784:100:22","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":5340,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6809,"src":"8823:21:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6809_$","typeString":"type(contract ProtocolFeeController)"}},"id":5341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8845:24:22","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":5375,"src":"8823:46:22","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":5342,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5332,"src":"8871:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5338,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8808:3:22","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5339,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8812:10:22","memberName":"encodeCall","nodeType":"MemberAccess","src":"8808:14:22","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8808:68:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":5335,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"8794:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":5337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8801:6:22","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":2158,"src":"8794:13:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":5344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8794:83:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":5345,"nodeType":"ExpressionStatement","src":"8794:83:22"}]},"documentation":{"id":5330,"nodeType":"StructuredDocumentation","src":"8690:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":5347,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8742:20:22","nodeType":"FunctionDefinition","parameters":{"id":5333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5332,"mutability":"mutable","name":"pool","nameLocation":"8771:4:22","nodeType":"VariableDeclaration","scope":5347,"src":"8763:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5331,"name":"address","nodeType":"ElementaryTypeName","src":"8763:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8762:14:22"},"returnParameters":{"id":5334,"nodeType":"ParameterList","parameters":[],"src":"8784:0:22"},"scope":6809,"src":"8733:151:22","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5374,"nodeType":"Block","src":"9267:186:22","statements":[{"assignments":[5359,5362],"declarations":[{"constant":false,"id":5359,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9295:13:22","nodeType":"VariableDeclaration","scope":5374,"src":"9278:30:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5357,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5358,"nodeType":"ArrayTypeName","src":"9278:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":5362,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9327:14:22","nodeType":"VariableDeclaration","scope":5374,"src":"9310:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5360,"name":"uint256","nodeType":"ElementaryTypeName","src":"9310:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5361,"nodeType":"ArrayTypeName","src":"9310:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":5367,"initialValue":{"arguments":[{"id":5365,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5350,"src":"9373:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5363,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"9345:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":5364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9352:20:22","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":957,"src":"9345:27:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":5366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9345:33:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9277:101:22"},{"expression":{"arguments":[{"id":5369,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5350,"src":"9410:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5370,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5359,"src":"9416:13:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":5371,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5362,"src":"9431:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":5368,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[5402,5606],"referencedDeclaration":5402,"src":"9388:21:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":5372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9388:58:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5373,"nodeType":"ExpressionStatement","src":"9388:58:22"}]},"documentation":{"id":5348,"nodeType":"StructuredDocumentation","src":"8890:305:22","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":5375,"implemented":true,"kind":"function","modifiers":[{"id":5353,"kind":"modifierInvocation","modifierName":{"id":5352,"name":"onlyVault","nameLocations":["9257:9:22"],"nodeType":"IdentifierPath","referencedDeclaration":6896,"src":"9257:9:22"},"nodeType":"ModifierInvocation","src":"9257:9:22"}],"name":"collectAggregateFeesHook","nameLocation":"9209:24:22","nodeType":"FunctionDefinition","parameters":{"id":5351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5350,"mutability":"mutable","name":"pool","nameLocation":"9242:4:22","nodeType":"VariableDeclaration","scope":5375,"src":"9234:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5349,"name":"address","nodeType":"ElementaryTypeName","src":"9234:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9233:14:22"},"returnParameters":{"id":5354,"nodeType":"ParameterList","parameters":[],"src":"9267:0:22"},"scope":6809,"src":"9200:253:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5401,"nodeType":"Block","src":"10544:159:22","statements":[{"expression":{"arguments":[{"id":5388,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"10576:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5389,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"10582:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10598:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"10582:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":5391,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5381,"src":"10604:14:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":5387,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[5402,5606],"referencedDeclaration":5606,"src":"10554:21:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$5161_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":5392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10554:65:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5393,"nodeType":"ExpressionStatement","src":"10554:65:22"},{"expression":{"arguments":[{"id":5395,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"10651:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5396,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"10657:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5397,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10673:5:22","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":5160,"src":"10657:21:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":5398,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5384,"src":"10680:15:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":5394,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[5402,5606],"referencedDeclaration":5606,"src":"10629:21:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$5161_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":5399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10629:67:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5400,"nodeType":"ExpressionStatement","src":"10629:67:22"}]},"documentation":{"id":5376,"nodeType":"StructuredDocumentation","src":"9459:929:22","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":5402,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10402:21:22","nodeType":"FunctionDefinition","parameters":{"id":5385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5378,"mutability":"mutable","name":"pool","nameLocation":"10441:4:22","nodeType":"VariableDeclaration","scope":5402,"src":"10433:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5377,"name":"address","nodeType":"ElementaryTypeName","src":"10433:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5381,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10472:14:22","nodeType":"VariableDeclaration","scope":5402,"src":"10455:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5379,"name":"uint256","nodeType":"ElementaryTypeName","src":"10455:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5380,"nodeType":"ArrayTypeName","src":"10455:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":5384,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10513:15:22","nodeType":"VariableDeclaration","scope":5402,"src":"10496:32:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5382,"name":"uint256","nodeType":"ElementaryTypeName","src":"10496:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5383,"nodeType":"ArrayTypeName","src":"10496:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10423:111:22"},"returnParameters":{"id":5386,"nodeType":"ParameterList","parameters":[],"src":"10544:0:22"},"scope":6809,"src":"10393:310:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":5605,"nodeType":"Block","src":"10816:2992:22","statements":[{"assignments":[5414],"declarations":[{"constant":false,"id":5414,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"11056:21:22","nodeType":"VariableDeclaration","scope":5605,"src":"11048:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5413,"name":"uint256","nodeType":"ElementaryTypeName","src":"11048:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5428,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5415,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5407,"src":"11080:7:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5416,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"11091:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5417,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"11091:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":5423,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"11192:32:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5425,"indexExpression":{"id":5424,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"11225:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11192:38:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5426,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11231:13:22","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":5164,"src":"11192:52:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:164:22","trueExpression":{"expression":{"baseExpression":{"id":5419,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"11126:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5421,"indexExpression":{"id":5420,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"11158:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:37:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11164:13:22","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":5164,"src":"11126:51:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"11048:196:22"},{"assignments":[5430],"declarations":[{"constant":false,"id":5430,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11263:24:22","nodeType":"VariableDeclaration","scope":5605,"src":"11255:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5429,"name":"uint256","nodeType":"ElementaryTypeName","src":"11255:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5442,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5431,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5407,"src":"11290:7:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5432,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"11301:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11317:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"11301:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11290:31:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":5438,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5202,"src":"11387:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5440,"indexExpression":{"id":5439,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"11419:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11387:37:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11290:134:22","trueExpression":{"baseExpression":{"id":5435,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5198,"src":"11336:30:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5437,"indexExpression":{"id":5436,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"11367:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11336:36:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11255:169:22"},{"assignments":[5444],"declarations":[{"constant":false,"id":5444,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11443:22:22","nodeType":"VariableDeclaration","scope":5605,"src":"11435:30:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5443,"name":"uint256","nodeType":"ElementaryTypeName","src":"11435:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5445,"nodeType":"VariableDeclarationStatement","src":"11435:30:22"},{"assignments":[5447],"declarations":[{"constant":false,"id":5447,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11481:15:22","nodeType":"VariableDeclaration","scope":5605,"src":"11476:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5446,"name":"bool","nodeType":"ElementaryTypeName","src":"11476:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5455,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5448,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5430,"src":"11499:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11526:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11499:28:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5451,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11531:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5452,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11555:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11531:25:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11499:57:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11476:80:22"},{"condition":{"id":5456,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5447,"src":"11570:15:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5465,"nodeType":"IfStatement","src":"11566:199:22","trueBody":{"id":5464,"nodeType":"Block","src":"11587:178:22","statements":[{"expression":{"id":5462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5457,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"11650:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5459,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"11706:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5460,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5430,"src":"11729:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5458,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"11675:30:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11675:79:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11650:104:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5463,"nodeType":"ExpressionStatement","src":"11650:104:22"}]}},{"assignments":[5470,5472],"declarations":[{"constant":false,"id":5470,"mutability":"mutable","name":"poolTokens","nameLocation":"11792:10:22","nodeType":"VariableDeclaration","scope":5605,"src":"11776:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5468,"nodeType":"UserDefinedTypeName","pathNode":{"id":5467,"name":"IERC20","nameLocations":["11776:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"11776:6:22"},"referencedDeclaration":7165,"src":"11776:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":5469,"nodeType":"ArrayTypeName","src":"11776:8:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5472,"mutability":"mutable","name":"numTokens","nameLocation":"11812:9:22","nodeType":"VariableDeclaration","scope":5605,"src":"11804:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5471,"name":"uint256","nodeType":"ElementaryTypeName","src":"11804:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5476,"initialValue":{"arguments":[{"id":5474,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"11848:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5473,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6054,"src":"11825:22:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11825:28:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11775:78:22"},{"body":{"id":5603,"nodeType":"Block","src":"11903:1899:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":5487,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"11921:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5489,"indexExpression":{"id":5488,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"11932:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11921:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11937:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11921:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5602,"nodeType":"IfStatement","src":"11917:1875:22","trueBody":{"id":5601,"nodeType":"Block","src":"11940:1852:22","statements":[{"assignments":[5494],"declarations":[{"constant":false,"id":5494,"mutability":"mutable","name":"token","nameLocation":"11965:5:22","nodeType":"VariableDeclaration","scope":5601,"src":"11958:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":5493,"nodeType":"UserDefinedTypeName","pathNode":{"id":5492,"name":"IERC20","nameLocations":["11958:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"11958:6:22"},"referencedDeclaration":7165,"src":"11958:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"id":5498,"initialValue":{"baseExpression":{"id":5495,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"11973:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5497,"indexExpression":{"id":5496,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"11984:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11973:13:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11958:28:22"},{"expression":{"arguments":[{"id":5502,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"12019:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"arguments":[{"id":5505,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12034:4:22","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6809","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$6809","typeString":"contract ProtocolFeeController"}],"id":5504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12026:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5503,"name":"address","nodeType":"ElementaryTypeName","src":"12026:7:22","typeDescriptions":{}}},"id":5506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12026:13:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":5507,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12041:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5509,"indexExpression":{"id":5508,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"12052:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12041:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5499,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"12005:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":5501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12012:6:22","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":2180,"src":"12005:13:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$7165_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":5510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12005:50:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5511,"nodeType":"ExpressionStatement","src":"12005:50:22"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5512,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5407,"src":"12234:7:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5513,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"12245:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12261:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"12245:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12234:31:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5533,"nodeType":"Block","src":"12371:99:22","statements":[{"eventCall":{"arguments":[{"id":5526,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"12424:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5527,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"12430:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"baseExpression":{"id":5528,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12437:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5530,"indexExpression":{"id":5529,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"12448:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12437:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5525,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":518,"src":"12398:25:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$7165_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":5531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12398:53:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5532,"nodeType":"EmitStatement","src":"12393:58:22"}]},"id":5534,"nodeType":"IfStatement","src":"12230:240:22","trueBody":{"id":5524,"nodeType":"Block","src":"12267:98:22","statements":[{"eventCall":{"arguments":[{"id":5517,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"12319:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5518,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"12325:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"baseExpression":{"id":5519,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"12332:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5521,"indexExpression":{"id":5520,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"12343:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12332:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5516,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":508,"src":"12294:24:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$7165_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":5522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12294:52:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5523,"nodeType":"EmitStatement","src":"12289:57:22"}]}},{"condition":{"id":5535,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5447,"src":"12492:15:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5599,"nodeType":"Block","src":"13422:356:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5573,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5430,"src":"13524:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13552:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13524:29:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5597,"nodeType":"Block","src":"13659:101:22","statements":[{"expression":{"id":5595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5587,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5216,"src":"13685:22:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5590,"indexExpression":{"id":5588,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"13708:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13685:28:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5591,"indexExpression":{"id":5589,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"13714:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13685:35:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":5592,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"13724:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5594,"indexExpression":{"id":5593,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"13735:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13724:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13685:52:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5596,"nodeType":"ExpressionStatement","src":"13685:52:22"}]},"id":5598,"nodeType":"IfStatement","src":"13520:240:22","trueBody":{"id":5586,"nodeType":"Block","src":"13555:98:22","statements":[{"expression":{"id":5584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5576,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5209,"src":"13581:19:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5579,"indexExpression":{"id":5577,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"13601:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13581:25:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5580,"indexExpression":{"id":5578,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"13607:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13581:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":5581,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"13617:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5583,"indexExpression":{"id":5582,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"13628:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13617:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13581:49:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5585,"nodeType":"ExpressionStatement","src":"13581:49:22"}]}}]},"id":5600,"nodeType":"IfStatement","src":"12488:1290:22","trueBody":{"id":5572,"nodeType":"Block","src":"12509:907:22","statements":[{"assignments":[5537],"declarations":[{"constant":false,"id":5537,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"13074:17:22","nodeType":"VariableDeclaration","scope":5572,"src":"13066:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5536,"name":"uint256","nodeType":"ElementaryTypeName","src":"13066:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5544,"initialValue":{"arguments":[{"id":5542,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5444,"src":"13114:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":5538,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"13094:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5540,"indexExpression":{"id":5539,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"13105:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13094:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13108:5:22","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":3099,"src":"13094:19:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13094:43:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13066:71:22"},{"assignments":[5546],"declarations":[{"constant":false,"id":5546,"mutability":"mutable","name":"protocolPortion","nameLocation":"13167:15:22","nodeType":"VariableDeclaration","scope":5572,"src":"13159:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5545,"name":"uint256","nodeType":"ElementaryTypeName","src":"13159:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5551,"initialValue":{"arguments":[{"id":5549,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"13209:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5547,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5537,"src":"13185:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13203:5:22","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":3063,"src":"13185:23:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13185:46:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13159:72:22"},{"expression":{"id":5558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5552,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5209,"src":"13254:19:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5555,"indexExpression":{"id":5553,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"13274:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13254:25:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5556,"indexExpression":{"id":5554,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"13280:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13254:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5557,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5546,"src":"13290:15:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13254:51:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5559,"nodeType":"ExpressionStatement","src":"13254:51:22"},{"expression":{"id":5570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5560,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5216,"src":"13327:22:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5563,"indexExpression":{"id":5561,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5404,"src":"13350:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13327:28:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5564,"indexExpression":{"id":5562,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5494,"src":"13356:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13327:35:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":5565,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"13366:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5567,"indexExpression":{"id":5566,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"13377:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13366:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5568,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5546,"src":"13382:15:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13366:31:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13327:70:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5571,"nodeType":"ExpressionStatement","src":"13327:70:22"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5481,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"11883:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5482,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5472,"src":"11887:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11883:13:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5604,"initializationExpression":{"assignments":[5478],"declarations":[{"constant":false,"id":5478,"mutability":"mutable","name":"i","nameLocation":"11876:1:22","nodeType":"VariableDeclaration","scope":5604,"src":"11868:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5477,"name":"uint256","nodeType":"ElementaryTypeName","src":"11868:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5480,"initialValue":{"hexValue":"30","id":5479,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11880:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11868:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11898:3:22","subExpression":{"id":5484,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"11900:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5486,"nodeType":"ExpressionStatement","src":"11898:3:22"},"nodeType":"ForStatement","src":"11863:1939:22"}]},"id":5606,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10718:21:22","nodeType":"FunctionDefinition","parameters":{"id":5411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5404,"mutability":"mutable","name":"pool","nameLocation":"10748:4:22","nodeType":"VariableDeclaration","scope":5606,"src":"10740:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5403,"name":"address","nodeType":"ElementaryTypeName","src":"10740:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5407,"mutability":"mutable","name":"feeType","nameLocation":"10770:7:22","nodeType":"VariableDeclaration","scope":5606,"src":"10754:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":5406,"nodeType":"UserDefinedTypeName","pathNode":{"id":5405,"name":"ProtocolFeeType","nameLocations":["10754:15:22"],"nodeType":"IdentifierPath","referencedDeclaration":5161,"src":"10754:15:22"},"referencedDeclaration":5161,"src":"10754:15:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":5410,"mutability":"mutable","name":"feeAmounts","nameLocation":"10796:10:22","nodeType":"VariableDeclaration","scope":5606,"src":"10779:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5408,"name":"uint256","nodeType":"ElementaryTypeName","src":"10779:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5409,"nodeType":"ArrayTypeName","src":"10779:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10739:68:22"},"returnParameters":{"id":5412,"nodeType":"ParameterList","parameters":[],"src":"10816:0:22"},"scope":6809,"src":"10709:3099:22","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[609],"body":{"id":5614,"nodeType":"Block","src":"13935:56:22","statements":[{"expression":{"id":5612,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5178,"src":"13952:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5611,"id":5613,"nodeType":"Return","src":"13945:39:22"}]},"documentation":{"id":5607,"nodeType":"StructuredDocumentation","src":"13814:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":5615,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13866:34:22","nodeType":"FunctionDefinition","parameters":{"id":5608,"nodeType":"ParameterList","parameters":[],"src":"13900:2:22"},"returnParameters":{"id":5611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5610,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5615,"src":"13926:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5609,"name":"uint256","nodeType":"ElementaryTypeName","src":"13926:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13925:9:22"},"scope":6809,"src":"13857:134:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[615],"body":{"id":5623,"nodeType":"Block","src":"14119:57:22","statements":[{"expression":{"id":5621,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"14136:33:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5620,"id":5622,"nodeType":"Return","src":"14129:40:22"}]},"documentation":{"id":5616,"nodeType":"StructuredDocumentation","src":"13997:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":5624,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"14049:35:22","nodeType":"FunctionDefinition","parameters":{"id":5617,"nodeType":"ParameterList","parameters":[],"src":"14084:2:22"},"returnParameters":{"id":5620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5619,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5624,"src":"14110:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5618,"name":"uint256","nodeType":"ElementaryTypeName","src":"14110:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14109:9:22"},"scope":6809,"src":"14040:136:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[623],"body":{"id":5636,"nodeType":"Block","src":"14294:46:22","statements":[{"expression":{"baseExpression":{"id":5632,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5194,"src":"14311:16:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5634,"indexExpression":{"id":5633,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5627,"src":"14328:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14311:22:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5631,"id":5635,"nodeType":"Return","src":"14304:29:22"}]},"documentation":{"id":5625,"nodeType":"StructuredDocumentation","src":"14182:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":5637,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14234:16:22","nodeType":"FunctionDefinition","parameters":{"id":5628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5627,"mutability":"mutable","name":"pool","nameLocation":"14259:4:22","nodeType":"VariableDeclaration","scope":5637,"src":"14251:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5626,"name":"address","nodeType":"ElementaryTypeName","src":"14251:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14250:14:22"},"returnParameters":{"id":5631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5630,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5637,"src":"14288:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5629,"name":"bool","nodeType":"ElementaryTypeName","src":"14288:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14287:6:22"},"scope":6809,"src":"14225:115:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[633],"body":{"id":5660,"nodeType":"Block","src":"14477:143:22","statements":[{"assignments":[5649],"declarations":[{"constant":false,"id":5649,"mutability":"mutable","name":"config","nameLocation":"14508:6:22","nodeType":"VariableDeclaration","scope":5660,"src":"14487:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5648,"nodeType":"UserDefinedTypeName","pathNode":{"id":5647,"name":"PoolFeeConfig","nameLocations":["14487:13:22"],"nodeType":"IdentifierPath","referencedDeclaration":5167,"src":"14487:13:22"},"referencedDeclaration":5167,"src":"14487:13:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5653,"initialValue":{"baseExpression":{"id":5650,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"14517:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5652,"indexExpression":{"id":5651,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5640,"src":"14549:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14517:37:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14487:67:22"},{"expression":{"components":[{"expression":{"id":5654,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5649,"src":"14573:6:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14580:13:22","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":5164,"src":"14573:20:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":5656,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5649,"src":"14595:6:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14602:10:22","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":5166,"src":"14595:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5658,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14572:41:22","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":5646,"id":5659,"nodeType":"Return","src":"14565:48:22"}]},"documentation":{"id":5638,"nodeType":"StructuredDocumentation","src":"14346:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":5661,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14398:26:22","nodeType":"FunctionDefinition","parameters":{"id":5641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5640,"mutability":"mutable","name":"pool","nameLocation":"14433:4:22","nodeType":"VariableDeclaration","scope":5661,"src":"14425:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5639,"name":"address","nodeType":"ElementaryTypeName","src":"14425:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14424:14:22"},"returnParameters":{"id":5646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5661,"src":"14462:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5642,"name":"uint256","nodeType":"ElementaryTypeName","src":"14462:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5645,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5661,"src":"14471:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5644,"name":"bool","nodeType":"ElementaryTypeName","src":"14471:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14461:15:22"},"scope":6809,"src":"14389:231:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[643],"body":{"id":5684,"nodeType":"Block","src":"14758:144:22","statements":[{"assignments":[5673],"declarations":[{"constant":false,"id":5673,"mutability":"mutable","name":"config","nameLocation":"14789:6:22","nodeType":"VariableDeclaration","scope":5684,"src":"14768:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5672,"nodeType":"UserDefinedTypeName","pathNode":{"id":5671,"name":"PoolFeeConfig","nameLocations":["14768:13:22"],"nodeType":"IdentifierPath","referencedDeclaration":5167,"src":"14768:13:22"},"referencedDeclaration":5167,"src":"14768:13:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5677,"initialValue":{"baseExpression":{"id":5674,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"14798:32:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5676,"indexExpression":{"id":5675,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5664,"src":"14831:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14798:38:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14768:68:22"},{"expression":{"components":[{"expression":{"id":5678,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5673,"src":"14855:6:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14862:13:22","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":5164,"src":"14855:20:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":5680,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5673,"src":"14877:6:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5681,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14884:10:22","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":5166,"src":"14877:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5682,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14854:41:22","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":5670,"id":5683,"nodeType":"Return","src":"14847:48:22"}]},"documentation":{"id":5662,"nodeType":"StructuredDocumentation","src":"14626:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":5685,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14678:27:22","nodeType":"FunctionDefinition","parameters":{"id":5665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5664,"mutability":"mutable","name":"pool","nameLocation":"14714:4:22","nodeType":"VariableDeclaration","scope":5685,"src":"14706:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5663,"name":"address","nodeType":"ElementaryTypeName","src":"14706:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14705:14:22"},"returnParameters":{"id":5670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5685,"src":"14743:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5666,"name":"uint256","nodeType":"ElementaryTypeName","src":"14743:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5685,"src":"14752:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5668,"name":"bool","nodeType":"ElementaryTypeName","src":"14752:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14742:15:22"},"scope":6809,"src":"14669:233:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[651],"body":{"id":5697,"nodeType":"Block","src":"15038:60:22","statements":[{"expression":{"baseExpression":{"id":5693,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5198,"src":"15055:30:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5695,"indexExpression":{"id":5694,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5688,"src":"15086:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15055:36:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5692,"id":5696,"nodeType":"Return","src":"15048:43:22"}]},"documentation":{"id":5686,"nodeType":"StructuredDocumentation","src":"14908:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":5698,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14960:31:22","nodeType":"FunctionDefinition","parameters":{"id":5689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5688,"mutability":"mutable","name":"pool","nameLocation":"15000:4:22","nodeType":"VariableDeclaration","scope":5698,"src":"14992:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5687,"name":"address","nodeType":"ElementaryTypeName","src":"14992:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14991:14:22"},"returnParameters":{"id":5692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5691,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5698,"src":"15029:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5690,"name":"uint256","nodeType":"ElementaryTypeName","src":"15029:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15028:9:22"},"scope":6809,"src":"14951:147:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[659],"body":{"id":5710,"nodeType":"Block","src":"15235:61:22","statements":[{"expression":{"baseExpression":{"id":5706,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5202,"src":"15252:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5708,"indexExpression":{"id":5707,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"15284:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15252:37:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5705,"id":5709,"nodeType":"Return","src":"15245:44:22"}]},"documentation":{"id":5699,"nodeType":"StructuredDocumentation","src":"15104:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":5711,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"15156:32:22","nodeType":"FunctionDefinition","parameters":{"id":5702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5701,"mutability":"mutable","name":"pool","nameLocation":"15197:4:22","nodeType":"VariableDeclaration","scope":5711,"src":"15189:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5700,"name":"address","nodeType":"ElementaryTypeName","src":"15189:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15188:14:22"},"returnParameters":{"id":5705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5711,"src":"15226:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5703,"name":"uint256","nodeType":"ElementaryTypeName","src":"15226:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15225:9:22"},"scope":6809,"src":"15147:149:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[668],"body":{"id":5763,"nodeType":"Block","src":"15442:273:22","statements":[{"assignments":[5724,5726],"declarations":[{"constant":false,"id":5724,"mutability":"mutable","name":"poolTokens","nameLocation":"15469:10:22","nodeType":"VariableDeclaration","scope":5763,"src":"15453:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5722,"nodeType":"UserDefinedTypeName","pathNode":{"id":5721,"name":"IERC20","nameLocations":["15453:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"15453:6:22"},"referencedDeclaration":7165,"src":"15453:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":5723,"nodeType":"ArrayTypeName","src":"15453:8:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5726,"mutability":"mutable","name":"numTokens","nameLocation":"15489:9:22","nodeType":"VariableDeclaration","scope":5763,"src":"15481:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5725,"name":"uint256","nodeType":"ElementaryTypeName","src":"15481:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5730,"initialValue":{"arguments":[{"id":5728,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5714,"src":"15525:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5727,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6054,"src":"15502:22:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15502:28:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15452:78:22"},{"expression":{"id":5737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5731,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5718,"src":"15541:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5735,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5726,"src":"15568:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15554:13:22","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5732,"name":"uint256","nodeType":"ElementaryTypeName","src":"15558:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5733,"nodeType":"ArrayTypeName","src":"15558:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15554:24:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15541:37:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5738,"nodeType":"ExpressionStatement","src":"15541:37:22"},{"body":{"id":5761,"nodeType":"Block","src":"15628:81:22","statements":[{"expression":{"id":5759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5749,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5718,"src":"15642:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5751,"indexExpression":{"id":5750,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5740,"src":"15653:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15642:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":5752,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5209,"src":"15658:19:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5754,"indexExpression":{"id":5753,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5714,"src":"15678:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:25:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5758,"indexExpression":{"baseExpression":{"id":5755,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5724,"src":"15684:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5757,"indexExpression":{"id":5756,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5740,"src":"15695:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15684:13:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15658:40:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15642:56:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5760,"nodeType":"ExpressionStatement","src":"15642:56:22"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5743,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5740,"src":"15608:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5744,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5726,"src":"15612:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15608:13:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5762,"initializationExpression":{"assignments":[5740],"declarations":[{"constant":false,"id":5740,"mutability":"mutable","name":"i","nameLocation":"15601:1:22","nodeType":"VariableDeclaration","scope":5762,"src":"15593:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5739,"name":"uint256","nodeType":"ElementaryTypeName","src":"15593:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5742,"initialValue":{"hexValue":"30","id":5741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15605:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15593:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15623:3:22","subExpression":{"id":5746,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5740,"src":"15625:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5748,"nodeType":"ExpressionStatement","src":"15623:3:22"},"nodeType":"ForStatement","src":"15588:121:22"}]},"documentation":{"id":5712,"nodeType":"StructuredDocumentation","src":"15302:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":5764,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15354:21:22","nodeType":"FunctionDefinition","parameters":{"id":5715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5714,"mutability":"mutable","name":"pool","nameLocation":"15384:4:22","nodeType":"VariableDeclaration","scope":5764,"src":"15376:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5713,"name":"address","nodeType":"ElementaryTypeName","src":"15376:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15375:14:22"},"returnParameters":{"id":5719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5718,"mutability":"mutable","name":"feeAmounts","nameLocation":"15430:10:22","nodeType":"VariableDeclaration","scope":5764,"src":"15413:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5716,"name":"uint256","nodeType":"ElementaryTypeName","src":"15413:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5717,"nodeType":"ArrayTypeName","src":"15413:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15412:29:22"},"scope":6809,"src":"15345:370:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[677],"body":{"id":5816,"nodeType":"Block","src":"15864:276:22","statements":[{"assignments":[5777,5779],"declarations":[{"constant":false,"id":5777,"mutability":"mutable","name":"poolTokens","nameLocation":"15891:10:22","nodeType":"VariableDeclaration","scope":5816,"src":"15875:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5775,"nodeType":"UserDefinedTypeName","pathNode":{"id":5774,"name":"IERC20","nameLocations":["15875:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"15875:6:22"},"referencedDeclaration":7165,"src":"15875:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":5776,"nodeType":"ArrayTypeName","src":"15875:8:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5779,"mutability":"mutable","name":"numTokens","nameLocation":"15911:9:22","nodeType":"VariableDeclaration","scope":5816,"src":"15903:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5778,"name":"uint256","nodeType":"ElementaryTypeName","src":"15903:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5783,"initialValue":{"arguments":[{"id":5781,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5767,"src":"15947:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5780,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6054,"src":"15924:22:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15924:28:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15874:78:22"},{"expression":{"id":5790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5784,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"15963:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5788,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5779,"src":"15990:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15976:13:22","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5785,"name":"uint256","nodeType":"ElementaryTypeName","src":"15980:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5786,"nodeType":"ArrayTypeName","src":"15980:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15976:24:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15963:37:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5791,"nodeType":"ExpressionStatement","src":"15963:37:22"},{"body":{"id":5814,"nodeType":"Block","src":"16050:84:22","statements":[{"expression":{"id":5812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5802,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5771,"src":"16064:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5804,"indexExpression":{"id":5803,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5793,"src":"16075:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16064:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":5805,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5216,"src":"16080:22:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5807,"indexExpression":{"id":5806,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5767,"src":"16103:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:28:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5811,"indexExpression":{"baseExpression":{"id":5808,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5777,"src":"16109:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5810,"indexExpression":{"id":5809,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5793,"src":"16120:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16109:13:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16080:43:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16064:59:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5813,"nodeType":"ExpressionStatement","src":"16064:59:22"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5796,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5793,"src":"16030:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5797,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5779,"src":"16034:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16030:13:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5815,"initializationExpression":{"assignments":[5793],"declarations":[{"constant":false,"id":5793,"mutability":"mutable","name":"i","nameLocation":"16023:1:22","nodeType":"VariableDeclaration","scope":5815,"src":"16015:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5792,"name":"uint256","nodeType":"ElementaryTypeName","src":"16015:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5795,"initialValue":{"hexValue":"30","id":5794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16027:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16015:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16045:3:22","subExpression":{"id":5799,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5793,"src":"16047:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5801,"nodeType":"ExpressionStatement","src":"16045:3:22"},"nodeType":"ForStatement","src":"16010:124:22"}]},"documentation":{"id":5765,"nodeType":"StructuredDocumentation","src":"15721:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":5817,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15773:24:22","nodeType":"FunctionDefinition","parameters":{"id":5768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5767,"mutability":"mutable","name":"pool","nameLocation":"15806:4:22","nodeType":"VariableDeclaration","scope":5817,"src":"15798:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5766,"name":"address","nodeType":"ElementaryTypeName","src":"15798:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15797:14:22"},"returnParameters":{"id":5772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5771,"mutability":"mutable","name":"feeAmounts","nameLocation":"15852:10:22","nodeType":"VariableDeclaration","scope":5817,"src":"15835:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5769,"name":"uint256","nodeType":"ElementaryTypeName","src":"15835:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5770,"nodeType":"ArrayTypeName","src":"15835:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15834:29:22"},"scope":6809,"src":"15764:376:22","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[687],"body":{"id":5832,"nodeType":"Block","src":"16347:103:22","statements":[{"expression":{"arguments":[{"id":5828,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5820,"src":"16395:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5829,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5822,"src":"16418:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5827,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"16364:30:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16364:79:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5826,"id":5831,"nodeType":"Return","src":"16357:86:22"}]},"documentation":{"id":5818,"nodeType":"StructuredDocumentation","src":"16146:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":5833,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"16198:29:22","nodeType":"FunctionDefinition","parameters":{"id":5823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5820,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16245:21:22","nodeType":"VariableDeclaration","scope":5833,"src":"16237:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5819,"name":"uint256","nodeType":"ElementaryTypeName","src":"16237:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5822,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16284:24:22","nodeType":"VariableDeclaration","scope":5833,"src":"16276:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5821,"name":"uint256","nodeType":"ElementaryTypeName","src":"16276:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16227:87:22"},"returnParameters":{"id":5826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5825,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5833,"src":"16338:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5824,"name":"uint256","nodeType":"ElementaryTypeName","src":"16338:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16337:9:22"},"scope":6809,"src":"16189:261:22","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[693],"body":{"id":5870,"nodeType":"Block","src":"16584:347:22","statements":[{"assignments":[5844],"declarations":[{"constant":false,"id":5844,"mutability":"mutable","name":"feeConfig","nameLocation":"16615:9:22","nodeType":"VariableDeclaration","scope":5870,"src":"16594:30:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5843,"nodeType":"UserDefinedTypeName","pathNode":{"id":5842,"name":"PoolFeeConfig","nameLocations":["16594:13:22"],"nodeType":"IdentifierPath","referencedDeclaration":5167,"src":"16594:13:22"},"referencedDeclaration":5167,"src":"16594:13:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5848,"initialValue":{"baseExpression":{"id":5845,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"16627:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5847,"indexExpression":{"id":5846,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5836,"src":"16659:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16627:37:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16594:70:22"},{"assignments":[5850],"declarations":[{"constant":false,"id":5850,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16682:21:22","nodeType":"VariableDeclaration","scope":5870,"src":"16674:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5849,"name":"uint256","nodeType":"ElementaryTypeName","src":"16674:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5852,"initialValue":{"id":5851,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5178,"src":"16706:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16674:64:22"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5853,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5844,"src":"16753:9:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16763:10:22","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":5166,"src":"16753:20:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16777:5:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16753:29:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5857,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"16786:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5858,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5844,"src":"16811:9:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16821:13:22","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":5164,"src":"16811:23:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16786:48:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16753:81:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5869,"nodeType":"IfStatement","src":"16749:176:22","trueBody":{"id":5868,"nodeType":"Block","src":"16836:89:22","statements":[{"expression":{"arguments":[{"id":5863,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5836,"src":"16879:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5864,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5850,"src":"16885:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":5865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16908:5:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5862,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6749,"src":"16850:28:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16850:64:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5867,"nodeType":"ExpressionStatement","src":"16850:64:22"}]}}]},"documentation":{"id":5834,"nodeType":"StructuredDocumentation","src":"16456:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":5871,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5839,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5836,"src":"16578:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5840,"kind":"modifierInvocation","modifierName":{"id":5838,"name":"withLatestFees","nameLocations":["16563:14:22"],"nodeType":"IdentifierPath","referencedDeclaration":5294,"src":"16563:14:22"},"nodeType":"ModifierInvocation","src":"16563:20:22"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16508:31:22","nodeType":"FunctionDefinition","parameters":{"id":5837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5836,"mutability":"mutable","name":"pool","nameLocation":"16548:4:22","nodeType":"VariableDeclaration","scope":5871,"src":"16540:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5835,"name":"address","nodeType":"ElementaryTypeName","src":"16540:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16539:14:22"},"returnParameters":{"id":5841,"nodeType":"ParameterList","parameters":[],"src":"16584:0:22"},"scope":6809,"src":"16499:432:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[699],"body":{"id":5908,"nodeType":"Block","src":"17066:353:22","statements":[{"assignments":[5882],"declarations":[{"constant":false,"id":5882,"mutability":"mutable","name":"feeConfig","nameLocation":"17097:9:22","nodeType":"VariableDeclaration","scope":5908,"src":"17076:30:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5881,"nodeType":"UserDefinedTypeName","pathNode":{"id":5880,"name":"PoolFeeConfig","nameLocations":["17076:13:22"],"nodeType":"IdentifierPath","referencedDeclaration":5167,"src":"17076:13:22"},"referencedDeclaration":5167,"src":"17076:13:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5886,"initialValue":{"baseExpression":{"id":5883,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"17109:32:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5885,"indexExpression":{"id":5884,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5874,"src":"17142:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17109:38:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17076:71:22"},{"assignments":[5888],"declarations":[{"constant":false,"id":5888,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"17165:22:22","nodeType":"VariableDeclaration","scope":5908,"src":"17157:30:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5887,"name":"uint256","nodeType":"ElementaryTypeName","src":"17157:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5890,"initialValue":{"id":5889,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"17190:33:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17157:66:22"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5891,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5882,"src":"17238:9:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5892,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17248:10:22","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":5166,"src":"17238:20:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17262:5:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17238:29:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5895,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5888,"src":"17271:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5896,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5882,"src":"17297:9:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5897,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17307:13:22","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":5164,"src":"17297:23:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17271:49:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17238:82:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5907,"nodeType":"IfStatement","src":"17234:179:22","trueBody":{"id":5906,"nodeType":"Block","src":"17322:91:22","statements":[{"expression":{"arguments":[{"id":5901,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5874,"src":"17366:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5902,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5888,"src":"17372:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":5903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17396:5:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5900,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6787,"src":"17336:29:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17336:66:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5905,"nodeType":"ExpressionStatement","src":"17336:66:22"}]}}]},"documentation":{"id":5872,"nodeType":"StructuredDocumentation","src":"16937:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":5909,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5877,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5874,"src":"17060:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5878,"kind":"modifierInvocation","modifierName":{"id":5876,"name":"withLatestFees","nameLocations":["17045:14:22"],"nodeType":"IdentifierPath","referencedDeclaration":5294,"src":"17045:14:22"},"nodeType":"ModifierInvocation","src":"17045:20:22"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16989:32:22","nodeType":"FunctionDefinition","parameters":{"id":5875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5874,"mutability":"mutable","name":"pool","nameLocation":"17030:4:22","nodeType":"VariableDeclaration","scope":5909,"src":"17022:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5873,"name":"address","nodeType":"ElementaryTypeName","src":"17022:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17021:14:22"},"returnParameters":{"id":5879,"nodeType":"ParameterList","parameters":[],"src":"17066:0:22"},"scope":6809,"src":"16980:439:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5963,"nodeType":"Block","src":"17532:594:22","statements":[{"assignments":[5920],"declarations":[{"constant":false,"id":5920,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17550:21:22","nodeType":"VariableDeclaration","scope":5963,"src":"17542:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5919,"name":"uint256","nodeType":"ElementaryTypeName","src":"17542:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5921,"nodeType":"VariableDeclarationStatement","src":"17542:29:22"},{"assignments":[5923],"declarations":[{"constant":false,"id":5923,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17589:24:22","nodeType":"VariableDeclaration","scope":5963,"src":"17581:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5922,"name":"uint256","nodeType":"ElementaryTypeName","src":"17581:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5924,"nodeType":"VariableDeclarationStatement","src":"17581:32:22"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5925,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"17628:7:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5926,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"17639:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5927,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17655:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"17639:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17628:31:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5956,"nodeType":"Block","src":"17844:179:22","statements":[{"expression":{"id":5948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5943,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5920,"src":"17858:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":5944,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"17882:32:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5946,"indexExpression":{"id":5945,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5911,"src":"17915:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17882:38:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5947,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17921:13:22","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":5164,"src":"17882:52:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17858:76:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5949,"nodeType":"ExpressionStatement","src":"17858:76:22"},{"expression":{"id":5954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5950,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5923,"src":"17948:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5951,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5202,"src":"17975:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5953,"indexExpression":{"id":5952,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5911,"src":"18007:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17975:37:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17948:64:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5955,"nodeType":"ExpressionStatement","src":"17948:64:22"}]},"id":5957,"nodeType":"IfStatement","src":"17624:399:22","trueBody":{"id":5942,"nodeType":"Block","src":"17661:177:22","statements":[{"expression":{"id":5934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5929,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5920,"src":"17675:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":5930,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"17699:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5932,"indexExpression":{"id":5931,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5911,"src":"17731:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17699:37:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5933,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17737:13:22","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":5164,"src":"17699:51:22","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17675:75:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5935,"nodeType":"ExpressionStatement","src":"17675:75:22"},{"expression":{"id":5940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5936,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5923,"src":"17764:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5937,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5198,"src":"17791:30:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5939,"indexExpression":{"id":5938,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5911,"src":"17822:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17791:36:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17764:63:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5941,"nodeType":"ExpressionStatement","src":"17764:63:22"}]}},{"expression":{"arguments":[{"id":5959,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5920,"src":"18071:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5960,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5923,"src":"18094:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5958,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"18040:30:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18040:79:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5918,"id":5962,"nodeType":"Return","src":"18033:86:22"}]},"id":5964,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17434:26:22","nodeType":"FunctionDefinition","parameters":{"id":5915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5911,"mutability":"mutable","name":"pool","nameLocation":"17469:4:22","nodeType":"VariableDeclaration","scope":5964,"src":"17461:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5910,"name":"address","nodeType":"ElementaryTypeName","src":"17461:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5914,"mutability":"mutable","name":"feeType","nameLocation":"17491:7:22","nodeType":"VariableDeclaration","scope":5964,"src":"17475:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":5913,"nodeType":"UserDefinedTypeName","pathNode":{"id":5912,"name":"ProtocolFeeType","nameLocations":["17475:15:22"],"nodeType":"IdentifierPath","referencedDeclaration":5161,"src":"17475:15:22"},"referencedDeclaration":5161,"src":"17475:15:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17460:39:22"},"returnParameters":{"id":5918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5917,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5964,"src":"17523:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5916,"name":"uint256","nodeType":"ElementaryTypeName","src":"17523:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17522:9:22"},"scope":6809,"src":"17425:701:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5993,"nodeType":"Block","src":"18314:882:22","statements":[{"expression":{"id":5982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5973,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5971,"src":"18324:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5974,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"18361:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":5979,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5968,"src":"18440:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5975,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"18397:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18419:10:22","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":3300,"src":"18397:32:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":5977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:34:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18432:7:22","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":3046,"src":"18397:42:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18397:68:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18361:104:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18324:141:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5983,"nodeType":"ExpressionStatement","src":"18324:141:22"},{"expression":{"id":5991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5984,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5971,"src":"19098:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5985,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5971,"src":"19124:22:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5986,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2586,"src":"19149:18:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19124:43:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5988,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19123:45:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5989,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2586,"src":"19171:18:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19123:66:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19098:91:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5992,"nodeType":"ExpressionStatement","src":"19098:91:22"}]},"id":5994,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"18141:30:22","nodeType":"FunctionDefinition","parameters":{"id":5969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5966,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"18189:21:22","nodeType":"VariableDeclaration","scope":5994,"src":"18181:29:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5965,"name":"uint256","nodeType":"ElementaryTypeName","src":"18181:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5968,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18228:24:22","nodeType":"VariableDeclaration","scope":5994,"src":"18220:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5967,"name":"uint256","nodeType":"ElementaryTypeName","src":"18220:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18171:87:22"},"returnParameters":{"id":5972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5971,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18290:22:22","nodeType":"VariableDeclaration","scope":5994,"src":"18282:30:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5970,"name":"uint256","nodeType":"ElementaryTypeName","src":"18282:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18281:32:22"},"scope":6809,"src":"18132:1064:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6029,"nodeType":"Block","src":"19266:276:22","statements":[{"assignments":[6000],"declarations":[{"constant":false,"id":6000,"mutability":"mutable","name":"poolCreator","nameLocation":"19284:11:22","nodeType":"VariableDeclaration","scope":6029,"src":"19276:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5999,"name":"address","nodeType":"ElementaryTypeName","src":"19276:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6004,"initialValue":{"arguments":[{"id":6002,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5996,"src":"19314:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6001,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6073,"src":"19298:15:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":6003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19298:21:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19276:43:22"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6005,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6000,"src":"19334:11:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":6008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19357:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6007,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19349:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6006,"name":"address","nodeType":"ElementaryTypeName","src":"19349:7:22","typeDescriptions":{}}},"id":6009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19349:10:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19334:25:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6016,"nodeType":"IfStatement","src":"19330:93:22","trueBody":{"id":6015,"nodeType":"Block","src":"19361:62:22","statements":[{"errorCall":{"arguments":[{"id":6012,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5996,"src":"19407:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6011,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":580,"src":"19382:24:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19382:30:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6014,"nodeType":"RevertStatement","src":"19375:37:22"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6017,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6000,"src":"19437:11:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":6018,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19452:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19456:6:22","memberName":"sender","nodeType":"MemberAccess","src":"19452:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19437:25:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6028,"nodeType":"IfStatement","src":"19433:103:22","trueBody":{"id":6027,"nodeType":"Block","src":"19464:72:22","statements":[{"errorCall":{"arguments":[{"expression":{"id":6022,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19508:3:22","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19512:6:22","memberName":"sender","nodeType":"MemberAccess","src":"19508:10:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6024,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5996,"src":"19520:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6021,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":587,"src":"19485:22:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":6025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19485:40:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6026,"nodeType":"RevertStatement","src":"19478:47:22"}]}}]},"id":6030,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19211:26:22","nodeType":"FunctionDefinition","parameters":{"id":5997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5996,"mutability":"mutable","name":"pool","nameLocation":"19246:4:22","nodeType":"VariableDeclaration","scope":6030,"src":"19238:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5995,"name":"address","nodeType":"ElementaryTypeName","src":"19238:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19237:14:22"},"returnParameters":{"id":5998,"nodeType":"ParameterList","parameters":[],"src":"19266:0:22"},"scope":6809,"src":"19202:340:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6053,"nodeType":"Block","src":"19660:87:22","statements":[{"expression":{"id":6046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6041,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6037,"src":"19670:6:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":6044,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6032,"src":"19700:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6042,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"19679:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19686:13:22","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":1863,"src":"19679:20:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":6045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19679:26:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19670:35:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6047,"nodeType":"ExpressionStatement","src":"19670:35:22"},{"expression":{"id":6051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6048,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6039,"src":"19715:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":6049,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6037,"src":"19727:6:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19734:6:22","memberName":"length","nodeType":"MemberAccess","src":"19727:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19715:25:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6052,"nodeType":"ExpressionStatement","src":"19715:25:22"}]},"id":6054,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19557:22:22","nodeType":"FunctionDefinition","parameters":{"id":6033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6032,"mutability":"mutable","name":"pool","nameLocation":"19588:4:22","nodeType":"VariableDeclaration","scope":6054,"src":"19580:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6031,"name":"address","nodeType":"ElementaryTypeName","src":"19580:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19579:14:22"},"returnParameters":{"id":6040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6037,"mutability":"mutable","name":"tokens","nameLocation":"19633:6:22","nodeType":"VariableDeclaration","scope":6054,"src":"19617:22:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":6035,"nodeType":"UserDefinedTypeName","pathNode":{"id":6034,"name":"IERC20","nameLocations":["19617:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"19617:6:22"},"referencedDeclaration":7165,"src":"19617:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":6036,"nodeType":"ArrayTypeName","src":"19617:8:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":6039,"mutability":"mutable","name":"numTokens","nameLocation":"19649:9:22","nodeType":"VariableDeclaration","scope":6054,"src":"19641:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6038,"name":"uint256","nodeType":"ElementaryTypeName","src":"19641:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19616:43:22"},"scope":6809,"src":"19548:199:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6072,"nodeType":"Block","src":"19884:130:22","statements":[{"assignments":[6063],"declarations":[{"constant":false,"id":6063,"mutability":"mutable","name":"roleAccounts","nameLocation":"19918:12:22","nodeType":"VariableDeclaration","scope":6072,"src":"19894:36:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":6062,"nodeType":"UserDefinedTypeName","pathNode":{"id":6061,"name":"PoolRoleAccounts","nameLocations":["19894:16:22"],"nodeType":"IdentifierPath","referencedDeclaration":2395,"src":"19894:16:22"},"referencedDeclaration":2395,"src":"19894:16:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":6068,"initialValue":{"arguments":[{"id":6066,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6056,"src":"19960:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6064,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"19933:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19940:19:22","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":2060,"src":"19933:26:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$2395_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":6067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19933:32:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19894:71:22"},{"expression":{"expression":{"id":6069,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"19983:12:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2395_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":6070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19996:11:22","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":2394,"src":"19983:24:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":6060,"id":6071,"nodeType":"Return","src":"19976:31:22"}]},"id":6073,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19822:15:22","nodeType":"FunctionDefinition","parameters":{"id":6057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6056,"mutability":"mutable","name":"pool","nameLocation":"19846:4:22","nodeType":"VariableDeclaration","scope":6073,"src":"19838:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6055,"name":"address","nodeType":"ElementaryTypeName","src":"19838:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19837:14:22"},"returnParameters":{"id":6060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6059,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6073,"src":"19875:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6058,"name":"address","nodeType":"ElementaryTypeName","src":"19875:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19874:9:22"},"scope":6809,"src":"19813:201:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6191,"nodeType":"Block","src":"21225:2076:22","statements":[{"assignments":[6081],"declarations":[{"constant":false,"id":6081,"mutability":"mutable","name":"oldFeeController","nameLocation":"21258:16:22","nodeType":"VariableDeclaration","scope":6191,"src":"21235:39:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"},"typeName":{"id":6080,"nodeType":"UserDefinedTypeName","pathNode":{"id":6079,"name":"IProtocolFeeController","nameLocations":["21235:22:22"],"nodeType":"IdentifierPath","referencedDeclaration":791,"src":"21235:22:22"},"referencedDeclaration":791,"src":"21235:22:22","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":6085,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6082,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"21277:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21284:24:22","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":2078,"src":"21277:31:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$791_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":6084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21277:33:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"21235:75:22"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6088,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"21333:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}],"id":6087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21325:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6086,"name":"address","nodeType":"ElementaryTypeName","src":"21325:7:22","typeDescriptions":{}}},"id":6089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21325:25:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":6092,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21362:4:22","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6809","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$6809","typeString":"contract ProtocolFeeController"}],"id":6091,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21354:7:22","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6090,"name":"address","nodeType":"ElementaryTypeName","src":"21354:7:22","typeDescriptions":{}}},"id":6093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21354:13:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21325:42:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6099,"nodeType":"IfStatement","src":"21321:104:22","trueBody":{"id":6098,"nodeType":"Block","src":"21369:56:22","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6095,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5224,"src":"21390:22:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21390:24:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6097,"nodeType":"RevertStatement","src":"21383:31:22"}]}},{"condition":{"baseExpression":{"id":6100,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5194,"src":"21439:16:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":6102,"indexExpression":{"id":6101,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"21456:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21439:22:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6108,"nodeType":"IfStatement","src":"21435:87:22","trueBody":{"id":6107,"nodeType":"Block","src":"21463:59:22","statements":[{"errorCall":{"arguments":[{"id":6104,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"21506:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6103,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5221,"src":"21484:21:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21484:27:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6106,"nodeType":"RevertStatement","src":"21477:34:22"}]}},{"expression":{"id":6113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6109,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5194,"src":"21532:16:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":6111,"indexExpression":{"id":6110,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"21549:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21532:22:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":6112,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21557:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"21532:29:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6114,"nodeType":"ExpressionStatement","src":"21532:29:22"},{"assignments":[6116,6118],"declarations":[{"constant":false,"id":6116,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"21581:25:22","nodeType":"VariableDeclaration","scope":6191,"src":"21573:33:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6115,"name":"uint256","nodeType":"ElementaryTypeName","src":"21573:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6118,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"21613:17:22","nodeType":"VariableDeclaration","scope":6191,"src":"21608:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6117,"name":"bool","nodeType":"ElementaryTypeName","src":"21608:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6123,"initialValue":{"arguments":[{"id":6121,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"21678:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6119,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"21634:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":6120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21651:26:22","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":633,"src":"21634:43:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":6122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21634:49:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21572:111:22"},{"expression":{"id":6133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6124,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"21693:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6126,"indexExpression":{"id":6125,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"21725:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21693:37:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6128,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6116,"src":"21776:25:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21802:8:22","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":8469,"src":"21776:34:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21776:36:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6131,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6118,"src":"21838:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6127,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5167,"src":"21733:13:22","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$5167_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21761:13:22","21826:10:22"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21733:133:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21693:173:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6134,"nodeType":"ExpressionStatement","src":"21693:173:22"},{"assignments":[6136,6138],"declarations":[{"constant":false,"id":6136,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"21886:26:22","nodeType":"VariableDeclaration","scope":6191,"src":"21878:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6135,"name":"uint256","nodeType":"ElementaryTypeName","src":"21878:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6138,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"21919:18:22","nodeType":"VariableDeclaration","scope":6191,"src":"21914:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6137,"name":"bool","nodeType":"ElementaryTypeName","src":"21914:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":6143,"initialValue":{"arguments":[{"id":6141,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"21999:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6139,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"21941:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":6140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21958:27:22","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":643,"src":"21941:44:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":6142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21941:72:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21877:136:22"},{"expression":{"id":6153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6144,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"22023:32:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6146,"indexExpression":{"id":6145,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"22056:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22023:38:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6148,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6136,"src":"22107:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22134:8:22","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":8469,"src":"22107:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22107:37:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6151,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6138,"src":"22170:18:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6147,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5167,"src":"22064:13:22","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$5167_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["22092:13:22","22158:10:22"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"22064:135:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"22023:176:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6154,"nodeType":"ExpressionStatement","src":"22023:176:22"},{"clauses":[{"block":{"id":6168,"nodeType":"Block","src":"22833:92:22","statements":[{"expression":{"id":6166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6162,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5198,"src":"22847:30:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6164,"indexExpression":{"id":6163,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"22878:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22847:36:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6165,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6160,"src":"22886:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22847:67:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6167,"nodeType":"ExpressionStatement","src":"22847:67:22"}]},"errorName":"","id":6169,"nodeType":"TryCatchClause","parameters":{"id":6161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6160,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"22803:28:22","nodeType":"VariableDeclaration","scope":6169,"src":"22795:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6159,"name":"uint256","nodeType":"ElementaryTypeName","src":"22795:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22794:38:22"},"src":"22786:139:22"},{"block":{"id":6170,"nodeType":"Block","src":"22932:72:22","statements":[]},"errorName":"","id":6171,"nodeType":"TryCatchClause","src":"22926:78:22"}],"externalCall":{"arguments":[{"id":6157,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"22780:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6155,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"22731:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":6156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22748:31:22","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":651,"src":"22731:48:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22731:54:22","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6172,"nodeType":"TryStatement","src":"22727:277:22"},{"clauses":[{"block":{"id":6186,"nodeType":"Block","src":"23122:94:22","statements":[{"expression":{"id":6184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6180,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5202,"src":"23136:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6182,"indexExpression":{"id":6181,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"23168:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23136:37:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6183,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"23176:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23136:69:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6185,"nodeType":"ExpressionStatement","src":"23136:69:22"}]},"errorName":"","id":6187,"nodeType":"TryCatchClause","parameters":{"id":6179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6178,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"23091:29:22","nodeType":"VariableDeclaration","scope":6187,"src":"23083:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6177,"name":"uint256","nodeType":"ElementaryTypeName","src":"23083:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23082:39:22"},"src":"23074:142:22"},{"block":{"id":6188,"nodeType":"Block","src":"23223:72:22","statements":[]},"errorName":"","id":6189,"nodeType":"TryCatchClause","src":"23217:78:22"}],"externalCall":{"arguments":[{"id":6175,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6076,"src":"23068:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6173,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6081,"src":"23018:16:22","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":6174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23035:32:22","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":659,"src":"23018:49:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23018:55:22","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6190,"nodeType":"TryStatement","src":"23014:281:22"}]},"documentation":{"id":6074,"nodeType":"StructuredDocumentation","src":"20231:945:22","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":6192,"implemented":true,"kind":"function","modifiers":[],"name":"migratePool","nameLocation":"21190:11:22","nodeType":"FunctionDefinition","parameters":{"id":6077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6076,"mutability":"mutable","name":"pool","nameLocation":"21210:4:22","nodeType":"VariableDeclaration","scope":6192,"src":"21202:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6075,"name":"address","nodeType":"ElementaryTypeName","src":"21202:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21201:14:22"},"returnParameters":{"id":6078,"nodeType":"ParameterList","parameters":[],"src":"21225:0:22"},"scope":6809,"src":"21181:2120:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[713],"body":{"id":6268,"nodeType":"Block","src":"23780:1540:22","statements":[{"expression":{"id":6212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6208,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5194,"src":"23790:16:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":6210,"indexExpression":{"id":6209,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6195,"src":"23807:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23790:22:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":6211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23815:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23790:29:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6213,"nodeType":"ExpressionStatement","src":"23790:29:22"},{"expression":{"id":6219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6214,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"23919:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":6215,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"23948:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":6217,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5178,"src":"23972:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23948:56:22","trueExpression":{"hexValue":"30","id":6216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23968:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23919:85:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6220,"nodeType":"ExpressionStatement","src":"23919:85:22"},{"expression":{"id":6226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6221,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6206,"src":"24014:27:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":6222,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"24044:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":6224,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"24068:33:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"24044:57:22","trueExpression":{"hexValue":"30","id":6223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24064:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24014:87:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6227,"nodeType":"ExpressionStatement","src":"24014:87:22"},{"expression":{"id":6237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6228,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"24549:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6230,"indexExpression":{"id":6229,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6195,"src":"24581:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24549:37:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6232,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"24632:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24659:8:22","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":8469,"src":"24632:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24632:37:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6235,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"24695:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6231,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5167,"src":"24589:13:22","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$5167_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24617:13:22","24683:10:22"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24589:134:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24549:174:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6238,"nodeType":"ExpressionStatement","src":"24549:174:22"},{"expression":{"id":6248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6239,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"24733:32:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6241,"indexExpression":{"id":6240,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6195,"src":"24766:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24733:38:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6243,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6206,"src":"24817:27:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24845:8:22","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":8469,"src":"24817:36:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24817:38:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6246,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"24881:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6242,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5167,"src":"24774:13:22","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$5167_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24802:13:22","24869:10:22"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24774:135:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24733:176:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6249,"nodeType":"ExpressionStatement","src":"24733:176:22"},{"eventCall":{"arguments":[{"id":6251,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6195,"src":"25069:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6252,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"25075:26:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6253,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"25103:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6250,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":551,"src":"25031:37:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":6254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25031:90:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6255,"nodeType":"EmitStatement","src":"25026:95:22"},{"eventCall":{"arguments":[{"id":6257,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6195,"src":"25175:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6258,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6206,"src":"25181:27:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6259,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"25210:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6256,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":560,"src":"25136:38:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":6260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25136:92:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6261,"nodeType":"EmitStatement","src":"25131:97:22"},{"eventCall":{"arguments":[{"id":6263,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6195,"src":"25276:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6264,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6197,"src":"25282:11:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6265,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"25295:17:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6262,"name":"PoolRegisteredWithFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":569,"src":"25244:31:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":6266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25244:69:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6267,"nodeType":"EmitStatement","src":"25239:74:22"}]},"documentation":{"id":6193,"nodeType":"StructuredDocumentation","src":"23525:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":6269,"implemented":true,"kind":"function","modifiers":[{"id":6202,"kind":"modifierInvocation","modifierName":{"id":6201,"name":"onlyVault","nameLocations":["23688:9:22"],"nodeType":"IdentifierPath","referencedDeclaration":6896,"src":"23688:9:22"},"nodeType":"ModifierInvocation","src":"23688:9:22"}],"name":"registerPool","nameLocation":"23577:12:22","nodeType":"FunctionDefinition","parameters":{"id":6200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6195,"mutability":"mutable","name":"pool","nameLocation":"23607:4:22","nodeType":"VariableDeclaration","scope":6269,"src":"23599:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6194,"name":"address","nodeType":"ElementaryTypeName","src":"23599:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6197,"mutability":"mutable","name":"poolCreator","nameLocation":"23629:11:22","nodeType":"VariableDeclaration","scope":6269,"src":"23621:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6196,"name":"address","nodeType":"ElementaryTypeName","src":"23621:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6199,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"23655:17:22","nodeType":"VariableDeclaration","scope":6269,"src":"23650:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6198,"name":"bool","nodeType":"ElementaryTypeName","src":"23650:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23589:89:22"},"returnParameters":{"id":6207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6204,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"23715:26:22","nodeType":"VariableDeclaration","scope":6269,"src":"23707:34:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6203,"name":"uint256","nodeType":"ElementaryTypeName","src":"23707:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6206,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"23751:27:22","nodeType":"VariableDeclaration","scope":6269,"src":"23743:35:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6205,"name":"uint256","nodeType":"ElementaryTypeName","src":"23743:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23706:73:22"},"scope":6809,"src":"23568:1752:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[719],"body":{"id":6281,"nodeType":"Block","src":"25473:82:22","statements":[{"expression":{"arguments":[{"id":6278,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6272,"src":"25519:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6277,"name":"_setGlobalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6299,"src":"25483:35:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":6279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25483:65:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6280,"nodeType":"ExpressionStatement","src":"25483:65:22"}]},"documentation":{"id":6270,"nodeType":"StructuredDocumentation","src":"25326:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":6282,"implemented":true,"kind":"function","modifiers":[{"id":6275,"kind":"modifierInvocation","modifierName":{"id":6274,"name":"authenticate","nameLocations":["25460:12:22"],"nodeType":"IdentifierPath","referencedDeclaration":2617,"src":"25460:12:22"},"nodeType":"ModifierInvocation","src":"25460:12:22"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"25378:34:22","nodeType":"FunctionDefinition","parameters":{"id":6273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6272,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25421:28:22","nodeType":"VariableDeclaration","scope":6282,"src":"25413:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6271,"name":"uint256","nodeType":"ElementaryTypeName","src":"25413:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25412:38:22"},"returnParameters":{"id":6276,"nodeType":"ParameterList","parameters":[],"src":"25473:0:22"},"scope":6809,"src":"25369:186:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6298,"nodeType":"Block","src":"25714:164:22","statements":[{"expression":{"id":6292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6290,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5178,"src":"25724:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6291,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6284,"src":"25759:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25724:63:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6293,"nodeType":"ExpressionStatement","src":"25724:63:22"},{"eventCall":{"arguments":[{"id":6295,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6284,"src":"25842:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6294,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":465,"src":"25803:38:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":6296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25803:68:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6297,"nodeType":"EmitStatement","src":"25798:73:22"}]},"id":6299,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":6287,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6284,"src":"25684:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6288,"kind":"modifierInvocation","modifierName":{"id":6286,"name":"withValidSwapFee","nameLocations":["25667:16:22"],"nodeType":"IdentifierPath","referencedDeclaration":5252,"src":"25667:16:22"},"nodeType":"ModifierInvocation","src":"25667:46:22"}],"name":"_setGlobalProtocolSwapFeePercentage","nameLocation":"25570:35:22","nodeType":"FunctionDefinition","parameters":{"id":6285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6284,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25623:28:22","nodeType":"VariableDeclaration","scope":6299,"src":"25615:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6283,"name":"uint256","nodeType":"ElementaryTypeName","src":"25615:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25605:52:22"},"returnParameters":{"id":6289,"nodeType":"ParameterList","parameters":[],"src":"25714:0:22"},"scope":6809,"src":"25561:317:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[725],"body":{"id":6311,"nodeType":"Block","src":"26033:84:22","statements":[{"expression":{"arguments":[{"id":6308,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6302,"src":"26080:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6307,"name":"_setGlobalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6329,"src":"26043:36:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":6309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26043:67:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6310,"nodeType":"ExpressionStatement","src":"26043:67:22"}]},"documentation":{"id":6300,"nodeType":"StructuredDocumentation","src":"25884:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":6312,"implemented":true,"kind":"function","modifiers":[{"id":6305,"kind":"modifierInvocation","modifierName":{"id":6304,"name":"authenticate","nameLocations":["26020:12:22"],"nodeType":"IdentifierPath","referencedDeclaration":2617,"src":"26020:12:22"},"nodeType":"ModifierInvocation","src":"26020:12:22"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"25936:35:22","nodeType":"FunctionDefinition","parameters":{"id":6303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6302,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25980:29:22","nodeType":"VariableDeclaration","scope":6312,"src":"25972:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6301,"name":"uint256","nodeType":"ElementaryTypeName","src":"25972:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25971:39:22"},"returnParameters":{"id":6306,"nodeType":"ParameterList","parameters":[],"src":"26033:0:22"},"scope":6809,"src":"25927:190:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6328,"nodeType":"Block","src":"26280:168:22","statements":[{"expression":{"id":6322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6320,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5180,"src":"26290:33:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6321,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6314,"src":"26326:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26290:65:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6323,"nodeType":"ExpressionStatement","src":"26290:65:22"},{"eventCall":{"arguments":[{"id":6325,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6314,"src":"26411:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6324,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":470,"src":"26371:39:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":6326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26371:70:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6327,"nodeType":"EmitStatement","src":"26366:75:22"}]},"id":6329,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":6317,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6314,"src":"26249:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6318,"kind":"modifierInvocation","modifierName":{"id":6316,"name":"withValidYieldFee","nameLocations":["26231:17:22"],"nodeType":"IdentifierPath","referencedDeclaration":5270,"src":"26231:17:22"},"nodeType":"ModifierInvocation","src":"26231:48:22"}],"name":"_setGlobalProtocolYieldFeePercentage","nameLocation":"26132:36:22","nodeType":"FunctionDefinition","parameters":{"id":6315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6314,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26186:29:22","nodeType":"VariableDeclaration","scope":6329,"src":"26178:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6313,"name":"uint256","nodeType":"ElementaryTypeName","src":"26178:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26168:53:22"},"returnParameters":{"id":6319,"nodeType":"ParameterList","parameters":[],"src":"26280:0:22"},"scope":6809,"src":"26123:325:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[733],"body":{"id":6351,"nodeType":"Block","src":"26699:87:22","statements":[{"expression":{"arguments":[{"id":6346,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6332,"src":"26738:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6347,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6334,"src":"26744:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":6348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26774:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6345,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6749,"src":"26709:28:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":6349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26709:70:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6350,"nodeType":"ExpressionStatement","src":"26709:70:22"}]},"documentation":{"id":6330,"nodeType":"StructuredDocumentation","src":"26454:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":6352,"implemented":true,"kind":"function","modifiers":[{"id":6337,"kind":"modifierInvocation","modifierName":{"id":6336,"name":"authenticate","nameLocations":["26618:12:22"],"nodeType":"IdentifierPath","referencedDeclaration":2617,"src":"26618:12:22"},"nodeType":"ModifierInvocation","src":"26618:12:22"},{"arguments":[{"id":6339,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6334,"src":"26648:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6340,"kind":"modifierInvocation","modifierName":{"id":6338,"name":"withValidSwapFee","nameLocations":["26631:16:22"],"nodeType":"IdentifierPath","referencedDeclaration":5252,"src":"26631:16:22"},"nodeType":"ModifierInvocation","src":"26631:46:22"},{"arguments":[{"id":6342,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6332,"src":"26693:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6343,"kind":"modifierInvocation","modifierName":{"id":6341,"name":"withLatestFees","nameLocations":["26678:14:22"],"nodeType":"IdentifierPath","referencedDeclaration":5294,"src":"26678:14:22"},"nodeType":"ModifierInvocation","src":"26678:20:22"}],"name":"setProtocolSwapFeePercentage","nameLocation":"26506:28:22","nodeType":"FunctionDefinition","parameters":{"id":6335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6332,"mutability":"mutable","name":"pool","nameLocation":"26552:4:22","nodeType":"VariableDeclaration","scope":6352,"src":"26544:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6331,"name":"address","nodeType":"ElementaryTypeName","src":"26544:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6334,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"26574:28:22","nodeType":"VariableDeclaration","scope":6352,"src":"26566:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6333,"name":"uint256","nodeType":"ElementaryTypeName","src":"26566:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26534:74:22"},"returnParameters":{"id":6344,"nodeType":"ParameterList","parameters":[],"src":"26699:0:22"},"scope":6809,"src":"26497:289:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[741],"body":{"id":6374,"nodeType":"Block","src":"27041:89:22","statements":[{"expression":{"arguments":[{"id":6369,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6355,"src":"27081:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6370,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6357,"src":"27087:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":6371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27118:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6368,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6787,"src":"27051:29:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":6372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27051:72:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6373,"nodeType":"ExpressionStatement","src":"27051:72:22"}]},"documentation":{"id":6353,"nodeType":"StructuredDocumentation","src":"26792:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":6375,"implemented":true,"kind":"function","modifiers":[{"id":6360,"kind":"modifierInvocation","modifierName":{"id":6359,"name":"authenticate","nameLocations":["26958:12:22"],"nodeType":"IdentifierPath","referencedDeclaration":2617,"src":"26958:12:22"},"nodeType":"ModifierInvocation","src":"26958:12:22"},{"arguments":[{"id":6362,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6357,"src":"26989:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6363,"kind":"modifierInvocation","modifierName":{"id":6361,"name":"withValidYieldFee","nameLocations":["26971:17:22"],"nodeType":"IdentifierPath","referencedDeclaration":5270,"src":"26971:17:22"},"nodeType":"ModifierInvocation","src":"26971:48:22"},{"arguments":[{"id":6365,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6355,"src":"27035:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6366,"kind":"modifierInvocation","modifierName":{"id":6364,"name":"withLatestFees","nameLocations":["27020:14:22"],"nodeType":"IdentifierPath","referencedDeclaration":5294,"src":"27020:14:22"},"nodeType":"ModifierInvocation","src":"27020:20:22"}],"name":"setProtocolYieldFeePercentage","nameLocation":"26844:29:22","nodeType":"FunctionDefinition","parameters":{"id":6358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6355,"mutability":"mutable","name":"pool","nameLocation":"26891:4:22","nodeType":"VariableDeclaration","scope":6375,"src":"26883:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6354,"name":"address","nodeType":"ElementaryTypeName","src":"26883:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6357,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26913:29:22","nodeType":"VariableDeclaration","scope":6375,"src":"26905:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6356,"name":"uint256","nodeType":"ElementaryTypeName","src":"26905:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26873:75:22"},"returnParameters":{"id":6367,"nodeType":"ParameterList","parameters":[],"src":"27041:0:22"},"scope":6809,"src":"26835:295:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[749],"body":{"id":6399,"nodeType":"Block","src":"27400:103:22","statements":[{"expression":{"arguments":[{"id":6393,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6378,"src":"27439:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6394,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6380,"src":"27445:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6395,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"27475:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27491:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"27475:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6392,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6487,"src":"27410:28:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$5161_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":6397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27410:86:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6398,"nodeType":"ExpressionStatement","src":"27410:86:22"}]},"documentation":{"id":6376,"nodeType":"StructuredDocumentation","src":"27136:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":6400,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":6383,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6378,"src":"27319:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6384,"kind":"modifierInvocation","modifierName":{"id":6382,"name":"onlyPoolCreator","nameLocations":["27303:15:22"],"nodeType":"IdentifierPath","referencedDeclaration":5234,"src":"27303:15:22"},"nodeType":"ModifierInvocation","src":"27303:21:22"},{"arguments":[{"id":6386,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6380,"src":"27349:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6387,"kind":"modifierInvocation","modifierName":{"id":6385,"name":"withValidPoolCreatorFee","nameLocations":["27325:23:22"],"nodeType":"IdentifierPath","referencedDeclaration":5284,"src":"27325:23:22"},"nodeType":"ModifierInvocation","src":"27325:53:22"},{"arguments":[{"id":6389,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6378,"src":"27394:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6390,"kind":"modifierInvocation","modifierName":{"id":6388,"name":"withLatestFees","nameLocations":["27379:14:22"],"nodeType":"IdentifierPath","referencedDeclaration":5294,"src":"27379:14:22"},"nodeType":"ModifierInvocation","src":"27379:20:22"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"27188:31:22","nodeType":"FunctionDefinition","parameters":{"id":6381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6378,"mutability":"mutable","name":"pool","nameLocation":"27237:4:22","nodeType":"VariableDeclaration","scope":6400,"src":"27229:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6377,"name":"address","nodeType":"ElementaryTypeName","src":"27229:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6380,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"27259:28:22","nodeType":"VariableDeclaration","scope":6400,"src":"27251:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6379,"name":"uint256","nodeType":"ElementaryTypeName","src":"27251:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27219:74:22"},"returnParameters":{"id":6391,"nodeType":"ParameterList","parameters":[],"src":"27400:0:22"},"scope":6809,"src":"27179:324:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[757],"body":{"id":6424,"nodeType":"Block","src":"27776:105:22","statements":[{"expression":{"arguments":[{"id":6418,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6403,"src":"27815:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6419,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6405,"src":"27821:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6420,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"27852:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27868:5:22","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":5160,"src":"27852:21:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6417,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6487,"src":"27786:28:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$5161_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":6422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27786:88:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6423,"nodeType":"ExpressionStatement","src":"27786:88:22"}]},"documentation":{"id":6401,"nodeType":"StructuredDocumentation","src":"27509:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":6425,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":6408,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6403,"src":"27694:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6409,"kind":"modifierInvocation","modifierName":{"id":6407,"name":"onlyPoolCreator","nameLocations":["27678:15:22"],"nodeType":"IdentifierPath","referencedDeclaration":5234,"src":"27678:15:22"},"nodeType":"ModifierInvocation","src":"27678:21:22"},{"arguments":[{"id":6411,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6405,"src":"27724:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6412,"kind":"modifierInvocation","modifierName":{"id":6410,"name":"withValidPoolCreatorFee","nameLocations":["27700:23:22"],"nodeType":"IdentifierPath","referencedDeclaration":5284,"src":"27700:23:22"},"nodeType":"ModifierInvocation","src":"27700:54:22"},{"arguments":[{"id":6414,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6403,"src":"27770:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6415,"kind":"modifierInvocation","modifierName":{"id":6413,"name":"withLatestFees","nameLocations":["27755:14:22"],"nodeType":"IdentifierPath","referencedDeclaration":5294,"src":"27755:14:22"},"nodeType":"ModifierInvocation","src":"27755:20:22"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"27561:32:22","nodeType":"FunctionDefinition","parameters":{"id":6406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6403,"mutability":"mutable","name":"pool","nameLocation":"27611:4:22","nodeType":"VariableDeclaration","scope":6425,"src":"27603:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6402,"name":"address","nodeType":"ElementaryTypeName","src":"27603:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6405,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"27633:29:22","nodeType":"VariableDeclaration","scope":6425,"src":"27625:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6404,"name":"uint256","nodeType":"ElementaryTypeName","src":"27625:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27593:75:22"},"returnParameters":{"id":6416,"nodeType":"ParameterList","parameters":[],"src":"27776:0:22"},"scope":6809,"src":"27552:329:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6486,"nodeType":"Block","src":"28037:900:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":6438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6435,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6432,"src":"28133:7:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":6436,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"28144:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28160:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"28144:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"28133:31:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6484,"nodeType":"Block","src":"28549:382:22","statements":[{"expression":{"id":6466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6462,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5202,"src":"28563:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6464,"indexExpression":{"id":6463,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6427,"src":"28595:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28563:37:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6465,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6429,"src":"28603:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28563:64:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6467,"nodeType":"ExpressionStatement","src":"28563:64:22"},{"expression":{"arguments":[{"id":6471,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6427,"src":"28770:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6473,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6427,"src":"28803:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6474,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"28809:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28825:5:22","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":5160,"src":"28809:21:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6472,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5964,"src":"28776:26:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$5161_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:55:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6468,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"28729:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28736:33:22","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":973,"src":"28729:40:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28729:103:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6478,"nodeType":"ExpressionStatement","src":"28729:103:22"},{"eventCall":{"arguments":[{"id":6480,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6427,"src":"28889:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6481,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6429,"src":"28895:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6479,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":498,"src":"28852:36:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28852:68:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6483,"nodeType":"EmitStatement","src":"28847:73:22"}]},"id":6485,"nodeType":"IfStatement","src":"28129:802:22","trueBody":{"id":6461,"nodeType":"Block","src":"28166:377:22","statements":[{"expression":{"id":6443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6439,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5198,"src":"28180:30:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":6441,"indexExpression":{"id":6440,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6427,"src":"28211:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28180:36:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6442,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6429,"src":"28219:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28180:63:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6444,"nodeType":"ExpressionStatement","src":"28180:63:22"},{"expression":{"arguments":[{"id":6448,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6427,"src":"28384:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6450,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6427,"src":"28417:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6451,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"28423:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6452,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28439:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"28423:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6449,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5964,"src":"28390:26:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$5161_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28390:54:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6445,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"28344:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28351:32:22","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":965,"src":"28344:39:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28344:101:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6455,"nodeType":"ExpressionStatement","src":"28344:101:22"},{"eventCall":{"arguments":[{"id":6457,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6427,"src":"28501:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6458,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6429,"src":"28507:24:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6456,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":491,"src":"28465:35:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28465:67:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6460,"nodeType":"EmitStatement","src":"28460:72:22"}]}}]},"id":6487,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"27896:28:22","nodeType":"FunctionDefinition","parameters":{"id":6433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6427,"mutability":"mutable","name":"pool","nameLocation":"27942:4:22","nodeType":"VariableDeclaration","scope":6487,"src":"27934:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6426,"name":"address","nodeType":"ElementaryTypeName","src":"27934:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6429,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"27964:24:22","nodeType":"VariableDeclaration","scope":6487,"src":"27956:32:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6428,"name":"uint256","nodeType":"ElementaryTypeName","src":"27956:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6432,"mutability":"mutable","name":"feeType","nameLocation":"28014:7:22","nodeType":"VariableDeclaration","scope":6487,"src":"27998:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":6431,"nodeType":"UserDefinedTypeName","pathNode":{"id":6430,"name":"ProtocolFeeType","nameLocations":["27998:15:22"],"nodeType":"IdentifierPath","referencedDeclaration":5161,"src":"27998:15:22"},"referencedDeclaration":5161,"src":"27998:15:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"27924:103:22"},"returnParameters":{"id":6434,"nodeType":"ParameterList","parameters":[],"src":"28037:0:22"},"scope":6809,"src":"27887:1050:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[765],"body":{"id":6533,"nodeType":"Block","src":"29071:258:22","statements":[{"assignments":[6501,6503],"declarations":[{"constant":false,"id":6501,"mutability":"mutable","name":"poolTokens","nameLocation":"29098:10:22","nodeType":"VariableDeclaration","scope":6533,"src":"29082:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":6499,"nodeType":"UserDefinedTypeName","pathNode":{"id":6498,"name":"IERC20","nameLocations":["29082:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"29082:6:22"},"referencedDeclaration":7165,"src":"29082:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":6500,"nodeType":"ArrayTypeName","src":"29082:8:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":6503,"mutability":"mutable","name":"numTokens","nameLocation":"29118:9:22","nodeType":"VariableDeclaration","scope":6533,"src":"29110:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6502,"name":"uint256","nodeType":"ElementaryTypeName","src":"29110:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6507,"initialValue":{"arguments":[{"id":6505,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6490,"src":"29154:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6504,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6054,"src":"29131:22:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":6506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29131:28:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29081:78:22"},{"body":{"id":6531,"nodeType":"Block","src":"29210:113:22","statements":[{"assignments":[6520],"declarations":[{"constant":false,"id":6520,"mutability":"mutable","name":"token","nameLocation":"29231:5:22","nodeType":"VariableDeclaration","scope":6531,"src":"29224:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":6519,"nodeType":"UserDefinedTypeName","pathNode":{"id":6518,"name":"IERC20","nameLocations":["29224:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"29224:6:22"},"referencedDeclaration":7165,"src":"29224:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"id":6524,"initialValue":{"baseExpression":{"id":6521,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6501,"src":"29239:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6523,"indexExpression":{"id":6522,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6509,"src":"29250:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29239:13:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"29224:28:22"},{"expression":{"arguments":[{"id":6526,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6490,"src":"29289:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6527,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6492,"src":"29295:9:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6528,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6520,"src":"29306:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}],"id":6525,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6607,"src":"29267:21:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$7165_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":6529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29267:45:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6530,"nodeType":"ExpressionStatement","src":"29267:45:22"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6512,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6509,"src":"29190:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6513,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6503,"src":"29194:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29190:13:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6532,"initializationExpression":{"assignments":[6509],"declarations":[{"constant":false,"id":6509,"mutability":"mutable","name":"i","nameLocation":"29183:1:22","nodeType":"VariableDeclaration","scope":6532,"src":"29175:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6508,"name":"uint256","nodeType":"ElementaryTypeName","src":"29175:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6511,"initialValue":{"hexValue":"30","id":6510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29187:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29175:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29205:3:22","subExpression":{"id":6515,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6509,"src":"29207:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6517,"nodeType":"ExpressionStatement","src":"29205:3:22"},"nodeType":"ForStatement","src":"29170:153:22"}]},"documentation":{"id":6488,"nodeType":"StructuredDocumentation","src":"28943:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":6534,"implemented":true,"kind":"function","modifiers":[{"id":6495,"kind":"modifierInvocation","modifierName":{"id":6494,"name":"authenticate","nameLocations":["29058:12:22"],"nodeType":"IdentifierPath","referencedDeclaration":2617,"src":"29058:12:22"},"nodeType":"ModifierInvocation","src":"29058:12:22"}],"name":"withdrawProtocolFees","nameLocation":"28995:20:22","nodeType":"FunctionDefinition","parameters":{"id":6493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6490,"mutability":"mutable","name":"pool","nameLocation":"29024:4:22","nodeType":"VariableDeclaration","scope":6534,"src":"29016:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6489,"name":"address","nodeType":"ElementaryTypeName","src":"29016:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6492,"mutability":"mutable","name":"recipient","nameLocation":"29038:9:22","nodeType":"VariableDeclaration","scope":6534,"src":"29030:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6491,"name":"address","nodeType":"ElementaryTypeName","src":"29030:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29015:33:22"},"returnParameters":{"id":6496,"nodeType":"ParameterList","parameters":[],"src":"29071:0:22"},"scope":6809,"src":"28986:343:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[776],"body":{"id":6560,"nodeType":"Block","src":"29485:217:22","statements":[{"expression":{"arguments":[{"id":6550,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6537,"src":"29628:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6551,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"29634:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}],"expression":{"id":6547,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"29588:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29595:32:22","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":2234,"src":"29588:39:22","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$7165_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":6552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29588:52:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":6553,"nodeType":"ExpressionStatement","src":"29588:52:22"},{"expression":{"arguments":[{"id":6555,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6537,"src":"29672:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6556,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6539,"src":"29678:9:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6557,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6542,"src":"29689:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}],"id":6554,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6607,"src":"29650:21:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$7165_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":6558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29650:45:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6559,"nodeType":"ExpressionStatement","src":"29650:45:22"}]},"documentation":{"id":6535,"nodeType":"StructuredDocumentation","src":"29335:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":6561,"implemented":true,"kind":"function","modifiers":[{"id":6545,"kind":"modifierInvocation","modifierName":{"id":6544,"name":"authenticate","nameLocations":["29472:12:22"],"nodeType":"IdentifierPath","referencedDeclaration":2617,"src":"29472:12:22"},"nodeType":"ModifierInvocation","src":"29472:12:22"}],"name":"withdrawProtocolFeesForToken","nameLocation":"29387:28:22","nodeType":"FunctionDefinition","parameters":{"id":6543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6537,"mutability":"mutable","name":"pool","nameLocation":"29424:4:22","nodeType":"VariableDeclaration","scope":6561,"src":"29416:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6536,"name":"address","nodeType":"ElementaryTypeName","src":"29416:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6539,"mutability":"mutable","name":"recipient","nameLocation":"29438:9:22","nodeType":"VariableDeclaration","scope":6561,"src":"29430:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6538,"name":"address","nodeType":"ElementaryTypeName","src":"29430:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6542,"mutability":"mutable","name":"token","nameLocation":"29456:5:22","nodeType":"VariableDeclaration","scope":6561,"src":"29449:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":6541,"nodeType":"UserDefinedTypeName","pathNode":{"id":6540,"name":"IERC20","nameLocations":["29449:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"29449:6:22"},"referencedDeclaration":7165,"src":"29449:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29415:47:22"},"returnParameters":{"id":6546,"nodeType":"ParameterList","parameters":[],"src":"29485:0:22"},"scope":6809,"src":"29378:324:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6606,"nodeType":"Block","src":"29795:316:22","statements":[{"assignments":[6572],"declarations":[{"constant":false,"id":6572,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29813:16:22","nodeType":"VariableDeclaration","scope":6606,"src":"29805:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6571,"name":"uint256","nodeType":"ElementaryTypeName","src":"29805:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6578,"initialValue":{"baseExpression":{"baseExpression":{"id":6573,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5209,"src":"29832:19:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":6575,"indexExpression":{"id":6574,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6563,"src":"29852:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:25:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":6577,"indexExpression":{"id":6576,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"29858:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29832:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29805:59:22"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6579,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6572,"src":"29878:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29897:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29878:20:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6605,"nodeType":"IfStatement","src":"29874:231:22","trueBody":{"id":6604,"nodeType":"Block","src":"29900:205:22","statements":[{"expression":{"id":6588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":6582,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5209,"src":"29914:19:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":6585,"indexExpression":{"id":6583,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6563,"src":"29934:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29914:25:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":6586,"indexExpression":{"id":6584,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"29940:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29914:32:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":6587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29949:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29914:36:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6589,"nodeType":"ExpressionStatement","src":"29914:36:22"},{"expression":{"arguments":[{"id":6593,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"29983:9:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6594,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6572,"src":"29994:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6590,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"29964:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":6592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29970:12:22","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":7277,"src":"29964:18:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$7165_$","typeString":"function (contract IERC20,address,uint256)"}},"id":6595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29964:47:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6596,"nodeType":"ExpressionStatement","src":"29964:47:22"},{"eventCall":{"arguments":[{"id":6598,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6563,"src":"30053:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6599,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"30059:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"id":6600,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"30066:9:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6601,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6572,"src":"30077:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6597,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":530,"src":"30031:21:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$7165_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":6602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30031:63:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6603,"nodeType":"EmitStatement","src":"30026:68:22"}]}}]},"id":6607,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"29717:21:22","nodeType":"FunctionDefinition","parameters":{"id":6569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6563,"mutability":"mutable","name":"pool","nameLocation":"29747:4:22","nodeType":"VariableDeclaration","scope":6607,"src":"29739:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6562,"name":"address","nodeType":"ElementaryTypeName","src":"29739:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6565,"mutability":"mutable","name":"recipient","nameLocation":"29761:9:22","nodeType":"VariableDeclaration","scope":6607,"src":"29753:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6564,"name":"address","nodeType":"ElementaryTypeName","src":"29753:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6568,"mutability":"mutable","name":"token","nameLocation":"29779:5:22","nodeType":"VariableDeclaration","scope":6607,"src":"29772:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":6567,"nodeType":"UserDefinedTypeName","pathNode":{"id":6566,"name":"IERC20","nameLocations":["29772:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"29772:6:22"},"referencedDeclaration":7165,"src":"29772:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29738:47:22"},"returnParameters":{"id":6570,"nodeType":"ParameterList","parameters":[],"src":"29795:0:22"},"scope":6809,"src":"29708:403:22","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[784],"body":{"id":6623,"nodeType":"Block","src":"30257:58:22","statements":[{"expression":{"arguments":[{"id":6619,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6610,"src":"30292:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6620,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6612,"src":"30298:9:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6618,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"30267:24:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":6621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30267:41:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6622,"nodeType":"ExpressionStatement","src":"30267:41:22"}]},"documentation":{"id":6608,"nodeType":"StructuredDocumentation","src":"30117:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":6624,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":6615,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6610,"src":"30251:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6616,"kind":"modifierInvocation","modifierName":{"id":6614,"name":"onlyPoolCreator","nameLocations":["30235:15:22"],"nodeType":"IdentifierPath","referencedDeclaration":5234,"src":"30235:15:22"},"nodeType":"ModifierInvocation","src":"30235:21:22"}],"name":"withdrawPoolCreatorFees","nameLocation":"30169:23:22","nodeType":"FunctionDefinition","parameters":{"id":6613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6610,"mutability":"mutable","name":"pool","nameLocation":"30201:4:22","nodeType":"VariableDeclaration","scope":6624,"src":"30193:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6609,"name":"address","nodeType":"ElementaryTypeName","src":"30193:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6612,"mutability":"mutable","name":"recipient","nameLocation":"30215:9:22","nodeType":"VariableDeclaration","scope":6624,"src":"30207:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6611,"name":"address","nodeType":"ElementaryTypeName","src":"30207:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30192:33:22"},"returnParameters":{"id":6617,"nodeType":"ParameterList","parameters":[],"src":"30257:0:22"},"scope":6809,"src":"30160:155:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[790],"body":{"id":6637,"nodeType":"Block","src":"30420:70:22","statements":[{"expression":{"arguments":[{"id":6631,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6627,"src":"30455:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6633,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6627,"src":"30477:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6632,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6073,"src":"30461:15:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":6634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30461:21:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6630,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"30430:24:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":6635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30430:53:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6636,"nodeType":"ExpressionStatement","src":"30430:53:22"}]},"documentation":{"id":6625,"nodeType":"StructuredDocumentation","src":"30321:38:22","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":6638,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"30373:23:22","nodeType":"FunctionDefinition","parameters":{"id":6628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6627,"mutability":"mutable","name":"pool","nameLocation":"30405:4:22","nodeType":"VariableDeclaration","scope":6638,"src":"30397:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6626,"name":"address","nodeType":"ElementaryTypeName","src":"30397:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30396:14:22"},"returnParameters":{"id":6629,"nodeType":"ParameterList","parameters":[],"src":"30420:0:22"},"scope":6809,"src":"30364:126:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6710,"nodeType":"Block","src":"30571:541:22","statements":[{"assignments":[6649,6651],"declarations":[{"constant":false,"id":6649,"mutability":"mutable","name":"poolTokens","nameLocation":"30598:10:22","nodeType":"VariableDeclaration","scope":6710,"src":"30582:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":6647,"nodeType":"UserDefinedTypeName","pathNode":{"id":6646,"name":"IERC20","nameLocations":["30582:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"30582:6:22"},"referencedDeclaration":7165,"src":"30582:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":6648,"nodeType":"ArrayTypeName","src":"30582:8:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":6651,"mutability":"mutable","name":"numTokens","nameLocation":"30618:9:22","nodeType":"VariableDeclaration","scope":6710,"src":"30610:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6650,"name":"uint256","nodeType":"ElementaryTypeName","src":"30610:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6655,"initialValue":{"arguments":[{"id":6653,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6640,"src":"30654:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6652,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6054,"src":"30631:22:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":6654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30631:28:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"30581:78:22"},{"body":{"id":6708,"nodeType":"Block","src":"30710:396:22","statements":[{"assignments":[6668],"declarations":[{"constant":false,"id":6668,"mutability":"mutable","name":"token","nameLocation":"30731:5:22","nodeType":"VariableDeclaration","scope":6708,"src":"30724:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":6667,"nodeType":"UserDefinedTypeName","pathNode":{"id":6666,"name":"IERC20","nameLocations":["30724:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"30724:6:22"},"referencedDeclaration":7165,"src":"30724:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"}],"id":6672,"initialValue":{"baseExpression":{"id":6669,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6649,"src":"30739:10:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7165_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6671,"indexExpression":{"id":6670,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"30750:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30739:13:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"30724:28:22"},{"assignments":[6674],"declarations":[{"constant":false,"id":6674,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"30775:16:22","nodeType":"VariableDeclaration","scope":6708,"src":"30767:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6673,"name":"uint256","nodeType":"ElementaryTypeName","src":"30767:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6680,"initialValue":{"baseExpression":{"baseExpression":{"id":6675,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5216,"src":"30794:22:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":6677,"indexExpression":{"id":6676,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6640,"src":"30817:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:28:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":6679,"indexExpression":{"id":6678,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"30823:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30794:35:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30767:62:22"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6681,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6674,"src":"30847:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30866:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30847:20:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6707,"nodeType":"IfStatement","src":"30843:253:22","trueBody":{"id":6706,"nodeType":"Block","src":"30869:227:22","statements":[{"expression":{"id":6690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":6684,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5216,"src":"30887:22:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":6687,"indexExpression":{"id":6685,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6640,"src":"30910:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30887:28:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$7165_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":6688,"indexExpression":{"id":6686,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"30916:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30887:35:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":6689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30925:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30887:39:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6691,"nodeType":"ExpressionStatement","src":"30887:39:22"},{"expression":{"arguments":[{"id":6695,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6642,"src":"30963:9:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6696,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6674,"src":"30974:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6692,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"30944:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":6694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30950:12:22","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":7277,"src":"30944:18:22","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$7165_$","typeString":"function (contract IERC20,address,uint256)"}},"id":6697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30944:47:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6698,"nodeType":"ExpressionStatement","src":"30944:47:22"},{"eventCall":{"arguments":[{"id":6700,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6640,"src":"31040:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6701,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"31046:5:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"id":6702,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6642,"src":"31053:9:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6703,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6674,"src":"31064:16:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6699,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":542,"src":"31015:24:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$7165_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":6704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31015:66:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6705,"nodeType":"EmitStatement","src":"31010:71:22"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6660,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"30690:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6661,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6651,"src":"30694:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30690:13:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6709,"initializationExpression":{"assignments":[6657],"declarations":[{"constant":false,"id":6657,"mutability":"mutable","name":"i","nameLocation":"30683:1:22","nodeType":"VariableDeclaration","scope":6709,"src":"30675:9:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6656,"name":"uint256","nodeType":"ElementaryTypeName","src":"30675:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6659,"initialValue":{"hexValue":"30","id":6658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30687:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"30675:13:22"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"30705:3:22","subExpression":{"id":6663,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6657,"src":"30707:1:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6665,"nodeType":"ExpressionStatement","src":"30705:3:22"},"nodeType":"ForStatement","src":"30670:436:22"}]},"id":6711,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"30505:24:22","nodeType":"FunctionDefinition","parameters":{"id":6643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6640,"mutability":"mutable","name":"pool","nameLocation":"30538:4:22","nodeType":"VariableDeclaration","scope":6711,"src":"30530:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6639,"name":"address","nodeType":"ElementaryTypeName","src":"30530:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6642,"mutability":"mutable","name":"recipient","nameLocation":"30552:9:22","nodeType":"VariableDeclaration","scope":6711,"src":"30544:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6641,"name":"address","nodeType":"ElementaryTypeName","src":"30544:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30529:33:22"},"returnParameters":{"id":6644,"nodeType":"ParameterList","parameters":[],"src":"30571:0:22"},"scope":6809,"src":"30496:616:22","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6748,"nodeType":"Block","src":"31352:771:22","statements":[{"expression":{"id":6730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6721,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5185,"src":"31667:31:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6723,"indexExpression":{"id":6722,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6714,"src":"31699:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31667:37:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6725,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6716,"src":"31750:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31779:8:22","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":8469,"src":"31750:37:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31750:39:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6728,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6718,"src":"31815:10:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6724,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5167,"src":"31707:13:22","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$5167_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31735:13:22","31803:10:22"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"31707:129:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31667:169:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6731,"nodeType":"ExpressionStatement","src":"31667:169:22"},{"expression":{"arguments":[{"id":6735,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6714,"src":"31971:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6737,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6714,"src":"32004:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6738,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"32010:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6739,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32026:4:22","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":5159,"src":"32010:20:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6736,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5964,"src":"31977:26:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$5161_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31977:54:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6732,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"31931:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31938:32:22","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":965,"src":"31931:39:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:101:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6742,"nodeType":"ExpressionStatement","src":"31931:101:22"},{"eventCall":{"arguments":[{"id":6744,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6714,"src":"32081:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6745,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6716,"src":"32087:28:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6743,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":477,"src":"32048:32:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32048:68:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6747,"nodeType":"EmitStatement","src":"32043:73:22"}]},"documentation":{"id":6712,"nodeType":"StructuredDocumentation","src":"31118:114:22","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":6749,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"31246:28:22","nodeType":"FunctionDefinition","parameters":{"id":6719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6714,"mutability":"mutable","name":"pool","nameLocation":"31283:4:22","nodeType":"VariableDeclaration","scope":6749,"src":"31275:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6713,"name":"address","nodeType":"ElementaryTypeName","src":"31275:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6716,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"31297:28:22","nodeType":"VariableDeclaration","scope":6749,"src":"31289:36:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6715,"name":"uint256","nodeType":"ElementaryTypeName","src":"31289:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6718,"mutability":"mutable","name":"isOverride","nameLocation":"31332:10:22","nodeType":"VariableDeclaration","scope":6749,"src":"31327:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6717,"name":"bool","nodeType":"ElementaryTypeName","src":"31327:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31274:69:22"},"returnParameters":{"id":6720,"nodeType":"ParameterList","parameters":[],"src":"31352:0:22"},"scope":6809,"src":"31237:886:22","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6786,"nodeType":"Block","src":"32395:767:22","statements":[{"expression":{"id":6768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6759,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"32699:32:22","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$5167_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6761,"indexExpression":{"id":6760,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6752,"src":"32732:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32699:38:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6763,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6754,"src":"32783:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32813:8:22","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":8469,"src":"32783:38:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32783:40:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6766,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6756,"src":"32849:10:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6762,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5167,"src":"32740:13:22","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$5167_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["32768:13:22","32837:10:22"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"32740:130:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"32699:171:22","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$5167_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6769,"nodeType":"ExpressionStatement","src":"32699:171:22"},{"expression":{"arguments":[{"id":6773,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6752,"src":"33007:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6775,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6752,"src":"33040:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6776,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5161,"src":"33046:15:22","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$5161_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33062:5:22","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":5160,"src":"33046:21:22","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$5161","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6774,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5964,"src":"33013:26:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$5161_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33013:55:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6770,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"32966:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32973:33:22","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":973,"src":"32966:40:22","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32966:103:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6780,"nodeType":"ExpressionStatement","src":"32966:103:22"},{"eventCall":{"arguments":[{"id":6782,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6752,"src":"33119:4:22","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6783,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6754,"src":"33125:29:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6781,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":484,"src":"33085:33:22","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33085:70:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6785,"nodeType":"EmitStatement","src":"33080:75:22"}]},"documentation":{"id":6750,"nodeType":"StructuredDocumentation","src":"32129:114:22","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":6787,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"32257:29:22","nodeType":"FunctionDefinition","parameters":{"id":6757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6752,"mutability":"mutable","name":"pool","nameLocation":"32304:4:22","nodeType":"VariableDeclaration","scope":6787,"src":"32296:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6751,"name":"address","nodeType":"ElementaryTypeName","src":"32296:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6754,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"32326:29:22","nodeType":"VariableDeclaration","scope":6787,"src":"32318:37:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6753,"name":"uint256","nodeType":"ElementaryTypeName","src":"32318:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6756,"mutability":"mutable","name":"isOverride","nameLocation":"32370:10:22","nodeType":"VariableDeclaration","scope":6787,"src":"32365:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6755,"name":"bool","nodeType":"ElementaryTypeName","src":"32365:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"32286:100:22"},"returnParameters":{"id":6758,"nodeType":"ParameterList","parameters":[],"src":"32395:0:22"},"scope":6809,"src":"32248:914:22","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6807,"nodeType":"Block","src":"33235:682:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6792,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6789,"src":"33770:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6793,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2586,"src":"33786:18:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33770:34:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6795,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33769:36:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6796,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2586,"src":"33808:18:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:57:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6798,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6789,"src":"33830:13:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33769:74:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6806,"nodeType":"IfStatement","src":"33765:146:22","trueBody":{"id":6805,"nodeType":"Block","src":"33845:66:22","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6800,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1486,"src":"33866:12:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1486_$","typeString":"type(contract IVaultErrors)"}},"id":6802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33879:19:22","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":1334,"src":"33866:32:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33866:34:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6804,"nodeType":"RevertStatement","src":"33859:41:22"}]}}]},"id":6808,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"33177:21:22","nodeType":"FunctionDefinition","parameters":{"id":6790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6789,"mutability":"mutable","name":"feePercentage","nameLocation":"33207:13:22","nodeType":"VariableDeclaration","scope":6808,"src":"33199:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6788,"name":"uint256","nodeType":"ElementaryTypeName","src":"33199:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33198:23:22"},"returnParameters":{"id":6791,"nodeType":"ParameterList","parameters":[],"src":"33235:0:22"},"scope":6809,"src":"33168:749:22","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6810,"src":"3120:30799:22","usedErrors":[38,572,575,580,587,590,1334,1358,3010,4670,5221,5224,7244,7525,7530,7533,7780],"usedEvents":[465,470,477,484,491,498,508,518,530,542,551,560,569]}],"src":"46:33874:22"},"id":22},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"CommonAuthentication":[5114],"IAuthorizer":[251],"IVault":[829],"SingletonAuthentication":[6868]},"id":6869,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6811,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:23"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":6813,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6869,"sourceUnit":252,"src":"72:91:23","symbolAliases":[{"foreign":{"id":6812,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":251,"src":"81:11:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6815,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6869,"sourceUnit":830,"src":"164:81:23","symbolAliases":[{"foreign":{"id":6814,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"173:6:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","file":"./CommonAuthentication.sol","id":6817,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6869,"sourceUnit":5115,"src":"247:66:23","symbolAliases":[{"foreign":{"id":6816,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5114,"src":"256:20:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6819,"name":"CommonAuthentication","nameLocations":["735:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":5114,"src":"735:20:23"},"id":6820,"nodeType":"InheritanceSpecifier","src":"735:20:23"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":6818,"nodeType":"StructuredDocumentation","src":"315:374:23","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":6868,"linearizedBaseContracts":[6868,5114,2669,47],"name":"SingletonAuthentication","nameLocation":"708:23:23","nodeType":"ContractDefinition","nodes":[{"body":{"id":6842,"nodeType":"Block","src":"932:64:23","statements":[]},"id":6843,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":6826,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6823,"src":"883:5:23","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":6835,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"922:4:23","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$6868","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$6868","typeString":"contract SingletonAuthentication"}],"id":6834,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"914:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6833,"name":"address","nodeType":"ElementaryTypeName","src":"914:7:23","typeDescriptions":{}}},"id":6836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"914:13:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6832,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"906:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":6831,"name":"uint160","nodeType":"ElementaryTypeName","src":"906:7:23","typeDescriptions":{}}},"id":6837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"906:22:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":6830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"898:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6829,"name":"uint256","nodeType":"ElementaryTypeName","src":"898:7:23","typeDescriptions":{}}},"id":6838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"898:31:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"890:7:23","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6827,"name":"bytes32","nodeType":"ElementaryTypeName","src":"890:7:23","typeDescriptions":{}}},"id":6839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:40:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":6840,"kind":"baseConstructorSpecifier","modifierName":{"id":6825,"name":"CommonAuthentication","nameLocations":["862:20:23"],"nodeType":"IdentifierPath","referencedDeclaration":5114,"src":"862:20:23"},"nodeType":"ModifierInvocation","src":"862:69:23"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6823,"mutability":"mutable","name":"vault","nameLocation":"855:5:23","nodeType":"VariableDeclaration","scope":6843,"src":"848:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":6822,"nodeType":"UserDefinedTypeName","pathNode":{"id":6821,"name":"IVault","nameLocations":["848:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"848:6:23"},"referencedDeclaration":829,"src":"848:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"847:14:23"},"returnParameters":{"id":6841,"nodeType":"ParameterList","parameters":[],"src":"932:0:23"},"scope":6868,"src":"836:160:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6853,"nodeType":"Block","src":"1176:35:23","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6850,"name":"_getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4996,"src":"1193:9:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$829_$","typeString":"function () view returns (contract IVault)"}},"id":6851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1193:11:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"functionReturnParameters":6849,"id":6852,"nodeType":"Return","src":"1186:18:23"}]},"documentation":{"id":6844,"nodeType":"StructuredDocumentation","src":"1002:120:23","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":6854,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1136:8:23","nodeType":"FunctionDefinition","parameters":{"id":6845,"nodeType":"ParameterList","parameters":[],"src":"1144:2:23"},"returnParameters":{"id":6849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6854,"src":"1168:6:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":6847,"nodeType":"UserDefinedTypeName","pathNode":{"id":6846,"name":"IVault","nameLocations":["1168:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"1168:6:23"},"referencedDeclaration":829,"src":"1168:6:23","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1167:8:23"},"scope":6868,"src":"1127:84:23","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":6866,"nodeType":"Block","src":"1407:50:23","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6861,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6854,"src":"1424:8:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$829_$","typeString":"function () view returns (contract IVault)"}},"id":6862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1424:10:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1435:13:23","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2143,"src":"1424:24:23","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$251_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":6864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1424:26:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}},"functionReturnParameters":6860,"id":6865,"nodeType":"Return","src":"1417:33:23"}]},"documentation":{"id":6855,"nodeType":"StructuredDocumentation","src":"1217:126:23","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":6867,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1357:13:23","nodeType":"FunctionDefinition","parameters":{"id":6856,"nodeType":"ParameterList","parameters":[],"src":"1370:2:23"},"returnParameters":{"id":6860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6867,"src":"1394:11:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"},"typeName":{"id":6858,"nodeType":"UserDefinedTypeName","pathNode":{"id":6857,"name":"IAuthorizer","nameLocations":["1394:11:23"],"nodeType":"IdentifierPath","referencedDeclaration":251,"src":"1394:11:23"},"referencedDeclaration":251,"src":"1394:11:23","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1393:13:23"},"scope":6868,"src":"1348:109:23","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":6869,"src":"690:769:23","usedErrors":[38],"usedEvents":[]}],"src":"46:1414:23"},"id":23},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[829],"IVaultErrors":[1486],"VaultGuard":[6917]},"id":6918,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6870,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:24"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":6872,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6918,"sourceUnit":1487,"src":"72:93:24","symbolAliases":[{"foreign":{"id":6871,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1486,"src":"81:12:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6874,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6918,"sourceUnit":830,"src":"166:81:24","symbolAliases":[{"foreign":{"id":6873,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"175:6:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":6875,"nodeType":"StructuredDocumentation","src":"249:59:24","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":6917,"linearizedBaseContracts":[6917],"name":"VaultGuard","nameLocation":"317:10:24","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":6878,"mutability":"immutable","name":"_vault","nameLocation":"360:6:24","nodeType":"VariableDeclaration","scope":6917,"src":"334:32:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":6877,"nodeType":"UserDefinedTypeName","pathNode":{"id":6876,"name":"IVault","nameLocations":["334:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"334:6:24"},"referencedDeclaration":829,"src":"334:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":6888,"nodeType":"Block","src":"399:31:24","statements":[{"expression":{"id":6886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6884,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"409:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6885,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6881,"src":"418:5:24","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"src":"409:14:24","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":6887,"nodeType":"ExpressionStatement","src":"409:14:24"}]},"id":6889,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6881,"mutability":"mutable","name":"vault","nameLocation":"392:5:24","nodeType":"VariableDeclaration","scope":6889,"src":"385:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":6880,"nodeType":"UserDefinedTypeName","pathNode":{"id":6879,"name":"IVault","nameLocations":["385:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"385:6:24"},"referencedDeclaration":829,"src":"385:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:24"},"returnParameters":{"id":6883,"nodeType":"ParameterList","parameters":[],"src":"399:0:24"},"scope":6917,"src":"373:57:24","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6895,"nodeType":"Block","src":"457:46:24","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6891,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6916,"src":"467:16:24","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":6892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6893,"nodeType":"ExpressionStatement","src":"467:18:24"},{"id":6894,"nodeType":"PlaceholderStatement","src":"495:1:24"}]},"id":6896,"name":"onlyVault","nameLocation":"445:9:24","nodeType":"ModifierDefinition","parameters":{"id":6890,"nodeType":"ParameterList","parameters":[],"src":"454:2:24"},"src":"436:67:24","virtual":false,"visibility":"internal"},{"body":{"id":6915,"nodeType":"Block","src":"550:124:24","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6899,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:24","memberName":"sender","nodeType":"MemberAccess","src":"564:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":6903,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6878,"src":"586:6:24","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}],"id":6902,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6901,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:24","typeDescriptions":{}}},"id":6904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6914,"nodeType":"IfStatement","src":"560:108:24","trueBody":{"id":6913,"nodeType":"Block","src":"595:73:24","statements":[{"errorCall":{"arguments":[{"expression":{"id":6909,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:24","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:24","memberName":"sender","nodeType":"MemberAccess","src":"646:10:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6906,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1486,"src":"616:12:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1486_$","typeString":"type(contract IVaultErrors)"}},"id":6908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:24","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":1358,"src":"616:29:24","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6912,"nodeType":"RevertStatement","src":"609:48:24"}]}}]},"id":6916,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:24","nodeType":"FunctionDefinition","parameters":{"id":6897,"nodeType":"ParameterList","parameters":[],"src":"534:2:24"},"returnParameters":{"id":6898,"nodeType":"ParameterList","parameters":[],"src":"550:0:24"},"scope":6917,"src":"509:165:24","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":6918,"src":"308:368:24","usedErrors":[],"usedEvents":[]}],"src":"46:631:24"},"id":24},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[7165],"IERC20Metadata":[7191],"IERC4626":[7087]},"id":7088,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6919,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:25"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":6921,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7088,"sourceUnit":7166,"src":"133:49:25","symbolAliases":[{"foreign":{"id":6920,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"141:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":6923,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7088,"sourceUnit":7192,"src":"183:76:25","symbolAliases":[{"foreign":{"id":6922,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7191,"src":"191:14:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6925,"name":"IERC20","nameLocations":["420:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"420:6:25"},"id":6926,"nodeType":"InheritanceSpecifier","src":"420:6:25"},{"baseName":{"id":6927,"name":"IERC20Metadata","nameLocations":["428:14:25"],"nodeType":"IdentifierPath","referencedDeclaration":7191,"src":"428:14:25"},"id":6928,"nodeType":"InheritanceSpecifier","src":"428:14:25"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":6924,"nodeType":"StructuredDocumentation","src":"261:136:25","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":7087,"linearizedBaseContracts":[7087,7191,7165],"name":"IERC4626","nameLocation":"408:8:25","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":6938,"name":"Deposit","nameLocation":"455:7:25","nodeType":"EventDefinition","parameters":{"id":6937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6930,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:25","nodeType":"VariableDeclaration","scope":6938,"src":"463:22:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6929,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6932,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:25","nodeType":"VariableDeclaration","scope":6938,"src":"487:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6931,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6934,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:25","nodeType":"VariableDeclaration","scope":6938,"src":"510:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6933,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6936,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:25","nodeType":"VariableDeclaration","scope":6938,"src":"526:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6935,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:25"},"src":"449:93:25"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":6950,"name":"Withdraw","nameLocation":"554:8:25","nodeType":"EventDefinition","parameters":{"id":6949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6940,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:25","nodeType":"VariableDeclaration","scope":6950,"src":"572:22:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6939,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6942,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:25","nodeType":"VariableDeclaration","scope":6950,"src":"604:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6941,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6944,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:25","nodeType":"VariableDeclaration","scope":6950,"src":"638:21:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6943,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6946,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:25","nodeType":"VariableDeclaration","scope":6950,"src":"669:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6945,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6948,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:25","nodeType":"VariableDeclaration","scope":6950,"src":"693:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6947,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:25"},"src":"548:166:25"},{"documentation":{"id":6951,"nodeType":"StructuredDocumentation","src":"720:207:25","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":6956,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:25","nodeType":"FunctionDefinition","parameters":{"id":6952,"nodeType":"ParameterList","parameters":[],"src":"946:2:25"},"returnParameters":{"id":6955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6954,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:25","nodeType":"VariableDeclaration","scope":6956,"src":"972:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6953,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:25"},"scope":7087,"src":"932:67:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6957,"nodeType":"StructuredDocumentation","src":"1005:286:25","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":6962,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:25","nodeType":"FunctionDefinition","parameters":{"id":6958,"nodeType":"ParameterList","parameters":[],"src":"1316:2:25"},"returnParameters":{"id":6961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6960,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:25","nodeType":"VariableDeclaration","scope":6962,"src":"1342:26:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6959,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:25"},"scope":7087,"src":"1296:74:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6963,"nodeType":"StructuredDocumentation","src":"1376:720:25","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":6970,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:25","nodeType":"FunctionDefinition","parameters":{"id":6966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6965,"mutability":"mutable","name":"assets","nameLocation":"2134:6:25","nodeType":"VariableDeclaration","scope":6970,"src":"2126:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6964,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:25"},"returnParameters":{"id":6969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6968,"mutability":"mutable","name":"shares","nameLocation":"2173:6:25","nodeType":"VariableDeclaration","scope":6970,"src":"2165:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6967,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:25"},"scope":7087,"src":"2101:80:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6971,"nodeType":"StructuredDocumentation","src":"2187:720:25","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":6978,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:25","nodeType":"FunctionDefinition","parameters":{"id":6974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6973,"mutability":"mutable","name":"shares","nameLocation":"2945:6:25","nodeType":"VariableDeclaration","scope":6978,"src":"2937:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6972,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:25"},"returnParameters":{"id":6977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6976,"mutability":"mutable","name":"assets","nameLocation":"2984:6:25","nodeType":"VariableDeclaration","scope":6978,"src":"2976:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6975,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:25"},"scope":7087,"src":"2912:80:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6979,"nodeType":"StructuredDocumentation","src":"2998:386:25","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":6986,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:25","nodeType":"FunctionDefinition","parameters":{"id":6982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6981,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:25","nodeType":"VariableDeclaration","scope":6986,"src":"3409:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6980,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:25"},"returnParameters":{"id":6985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6984,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:25","nodeType":"VariableDeclaration","scope":6986,"src":"3450:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6983,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:25"},"scope":7087,"src":"3389:80:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6987,"nodeType":"StructuredDocumentation","src":"3475:1012:25","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":6994,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:25","nodeType":"FunctionDefinition","parameters":{"id":6990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6989,"mutability":"mutable","name":"assets","nameLocation":"4524:6:25","nodeType":"VariableDeclaration","scope":6994,"src":"4516:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6988,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:25"},"returnParameters":{"id":6993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6992,"mutability":"mutable","name":"shares","nameLocation":"4563:6:25","nodeType":"VariableDeclaration","scope":6994,"src":"4555:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6991,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:25"},"scope":7087,"src":"4492:79:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6995,"nodeType":"StructuredDocumentation","src":"4577:651:25","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":7004,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:25","nodeType":"FunctionDefinition","parameters":{"id":7000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6997,"mutability":"mutable","name":"assets","nameLocation":"5258:6:25","nodeType":"VariableDeclaration","scope":7004,"src":"5250:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6996,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6999,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:25","nodeType":"VariableDeclaration","scope":7004,"src":"5266:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6998,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:25"},"returnParameters":{"id":7003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7002,"mutability":"mutable","name":"shares","nameLocation":"5310:6:25","nodeType":"VariableDeclaration","scope":7004,"src":"5302:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7001,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:25"},"scope":7087,"src":"5233:85:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7005,"nodeType":"StructuredDocumentation","src":"5324:341:25","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":7012,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:25","nodeType":"FunctionDefinition","parameters":{"id":7008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7007,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:25","nodeType":"VariableDeclaration","scope":7012,"src":"5687:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7006,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:25"},"returnParameters":{"id":7011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7010,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:25","nodeType":"VariableDeclaration","scope":7012,"src":"5728:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7009,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:25"},"scope":7087,"src":"5670:77:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7013,"nodeType":"StructuredDocumentation","src":"5753:984:25","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":7020,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:25","nodeType":"FunctionDefinition","parameters":{"id":7016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7015,"mutability":"mutable","name":"shares","nameLocation":"6771:6:25","nodeType":"VariableDeclaration","scope":7020,"src":"6763:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7014,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:25"},"returnParameters":{"id":7019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7018,"mutability":"mutable","name":"assets","nameLocation":"6810:6:25","nodeType":"VariableDeclaration","scope":7020,"src":"6802:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7017,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:25"},"scope":7087,"src":"6742:76:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7021,"nodeType":"StructuredDocumentation","src":"6824:642:25","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":7030,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:25","nodeType":"FunctionDefinition","parameters":{"id":7026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7023,"mutability":"mutable","name":"shares","nameLocation":"7493:6:25","nodeType":"VariableDeclaration","scope":7030,"src":"7485:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7022,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7025,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:25","nodeType":"VariableDeclaration","scope":7030,"src":"7501:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7024,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:25"},"returnParameters":{"id":7029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7028,"mutability":"mutable","name":"assets","nameLocation":"7545:6:25","nodeType":"VariableDeclaration","scope":7030,"src":"7537:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7027,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:25"},"scope":7087,"src":"7471:82:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7031,"nodeType":"StructuredDocumentation","src":"7559:293:25","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":7038,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:25","nodeType":"FunctionDefinition","parameters":{"id":7034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7033,"mutability":"mutable","name":"owner","nameLocation":"7886:5:25","nodeType":"VariableDeclaration","scope":7038,"src":"7878:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7032,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:25"},"returnParameters":{"id":7037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7036,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:25","nodeType":"VariableDeclaration","scope":7038,"src":"7916:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7035,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:25"},"scope":7087,"src":"7857:78:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7039,"nodeType":"StructuredDocumentation","src":"7941:1034:25","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":7046,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:25","nodeType":"FunctionDefinition","parameters":{"id":7042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7041,"mutability":"mutable","name":"assets","nameLocation":"9013:6:25","nodeType":"VariableDeclaration","scope":7046,"src":"9005:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7040,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:25"},"returnParameters":{"id":7045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7044,"mutability":"mutable","name":"shares","nameLocation":"9052:6:25","nodeType":"VariableDeclaration","scope":7046,"src":"9044:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7043,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:25"},"scope":7087,"src":"8980:80:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7047,"nodeType":"StructuredDocumentation","src":"9066:670:25","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":7058,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:25","nodeType":"FunctionDefinition","parameters":{"id":7054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7049,"mutability":"mutable","name":"assets","nameLocation":"9767:6:25","nodeType":"VariableDeclaration","scope":7058,"src":"9759:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7048,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7051,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:25","nodeType":"VariableDeclaration","scope":7058,"src":"9775:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7050,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7053,"mutability":"mutable","name":"owner","nameLocation":"9801:5:25","nodeType":"VariableDeclaration","scope":7058,"src":"9793:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7052,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:25"},"returnParameters":{"id":7057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7056,"mutability":"mutable","name":"shares","nameLocation":"9834:6:25","nodeType":"VariableDeclaration","scope":7058,"src":"9826:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7055,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:25"},"scope":7087,"src":"9741:101:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7059,"nodeType":"StructuredDocumentation","src":"9848:381:25","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":7066,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:25","nodeType":"FunctionDefinition","parameters":{"id":7062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7061,"mutability":"mutable","name":"owner","nameLocation":"10261:5:25","nodeType":"VariableDeclaration","scope":7066,"src":"10253:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7060,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:25"},"returnParameters":{"id":7065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7064,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:25","nodeType":"VariableDeclaration","scope":7066,"src":"10291:17:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7063,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:25"},"scope":7087,"src":"10234:76:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7067,"nodeType":"StructuredDocumentation","src":"10316:1010:25","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":7074,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:25","nodeType":"FunctionDefinition","parameters":{"id":7070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7069,"mutability":"mutable","name":"shares","nameLocation":"11362:6:25","nodeType":"VariableDeclaration","scope":7074,"src":"11354:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7068,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:25"},"returnParameters":{"id":7073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7072,"mutability":"mutable","name":"assets","nameLocation":"11401:6:25","nodeType":"VariableDeclaration","scope":7074,"src":"11393:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7071,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:25"},"scope":7087,"src":"11331:78:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7075,"nodeType":"StructuredDocumentation","src":"11415:661:25","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":7086,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:25","nodeType":"FunctionDefinition","parameters":{"id":7082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7077,"mutability":"mutable","name":"shares","nameLocation":"12105:6:25","nodeType":"VariableDeclaration","scope":7086,"src":"12097:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7076,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7079,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:25","nodeType":"VariableDeclaration","scope":7086,"src":"12113:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7078,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7081,"mutability":"mutable","name":"owner","nameLocation":"12139:5:25","nodeType":"VariableDeclaration","scope":7086,"src":"12131:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7080,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:25"},"returnParameters":{"id":7085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7084,"mutability":"mutable","name":"assets","nameLocation":"12172:6:25","nodeType":"VariableDeclaration","scope":7086,"src":"12164:14:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7083,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:25"},"scope":7087,"src":"12081:99:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7088,"src":"398:11784:25","usedErrors":[],"usedEvents":[6938,6950,7099,7108]}],"src":"107:12076:25"},"id":25},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[7165]},"id":7166,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7089,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:26"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":7090,"nodeType":"StructuredDocumentation","src":"132:70:26","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":7165,"linearizedBaseContracts":[7165],"name":"IERC20","nameLocation":"213:6:26","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":7091,"nodeType":"StructuredDocumentation","src":"226:158:26","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":7099,"name":"Transfer","nameLocation":"395:8:26","nodeType":"EventDefinition","parameters":{"id":7098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7093,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:26","nodeType":"VariableDeclaration","scope":7099,"src":"404:20:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7092,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7095,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:26","nodeType":"VariableDeclaration","scope":7099,"src":"426:18:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7094,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7097,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:26","nodeType":"VariableDeclaration","scope":7099,"src":"446:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7096,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:26"},"src":"389:72:26"},{"anonymous":false,"documentation":{"id":7100,"nodeType":"StructuredDocumentation","src":"467:148:26","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":7108,"name":"Approval","nameLocation":"626:8:26","nodeType":"EventDefinition","parameters":{"id":7107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7102,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:26","nodeType":"VariableDeclaration","scope":7108,"src":"635:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7101,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7104,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:26","nodeType":"VariableDeclaration","scope":7108,"src":"658:23:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7103,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7106,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:26","nodeType":"VariableDeclaration","scope":7108,"src":"683:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7105,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:26"},"src":"620:78:26"},{"documentation":{"id":7109,"nodeType":"StructuredDocumentation","src":"704:65:26","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":7114,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:26","nodeType":"FunctionDefinition","parameters":{"id":7110,"nodeType":"ParameterList","parameters":[],"src":"794:2:26"},"returnParameters":{"id":7113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7114,"src":"820:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7111,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:26"},"scope":7165,"src":"774:55:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7115,"nodeType":"StructuredDocumentation","src":"835:71:26","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":7122,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:26","nodeType":"FunctionDefinition","parameters":{"id":7118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7117,"mutability":"mutable","name":"account","nameLocation":"938:7:26","nodeType":"VariableDeclaration","scope":7122,"src":"930:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7116,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:26"},"returnParameters":{"id":7121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7120,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7122,"src":"970:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7119,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:26"},"scope":7165,"src":"911:68:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7123,"nodeType":"StructuredDocumentation","src":"985:213:26","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":7132,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:26","nodeType":"FunctionDefinition","parameters":{"id":7128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7125,"mutability":"mutable","name":"to","nameLocation":"1229:2:26","nodeType":"VariableDeclaration","scope":7132,"src":"1221:10:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7124,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7127,"mutability":"mutable","name":"value","nameLocation":"1241:5:26","nodeType":"VariableDeclaration","scope":7132,"src":"1233:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7126,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:26"},"returnParameters":{"id":7131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7132,"src":"1266:4:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7129,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:26"},"scope":7165,"src":"1203:69:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7133,"nodeType":"StructuredDocumentation","src":"1278:264:26","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":7142,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:26","nodeType":"FunctionDefinition","parameters":{"id":7138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7135,"mutability":"mutable","name":"owner","nameLocation":"1574:5:26","nodeType":"VariableDeclaration","scope":7142,"src":"1566:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7134,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7137,"mutability":"mutable","name":"spender","nameLocation":"1589:7:26","nodeType":"VariableDeclaration","scope":7142,"src":"1581:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7136,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:26"},"returnParameters":{"id":7141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7142,"src":"1621:7:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7139,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:26"},"scope":7165,"src":"1547:83:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7143,"nodeType":"StructuredDocumentation","src":"1636:667:26","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":7152,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:26","nodeType":"FunctionDefinition","parameters":{"id":7148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7145,"mutability":"mutable","name":"spender","nameLocation":"2333:7:26","nodeType":"VariableDeclaration","scope":7152,"src":"2325:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7144,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7147,"mutability":"mutable","name":"value","nameLocation":"2350:5:26","nodeType":"VariableDeclaration","scope":7152,"src":"2342:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7146,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:26"},"returnParameters":{"id":7151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7152,"src":"2375:4:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7149,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:26"},"scope":7165,"src":"2308:73:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7153,"nodeType":"StructuredDocumentation","src":"2387:297:26","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":7164,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:26","nodeType":"FunctionDefinition","parameters":{"id":7160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7155,"mutability":"mutable","name":"from","nameLocation":"2719:4:26","nodeType":"VariableDeclaration","scope":7164,"src":"2711:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7154,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7157,"mutability":"mutable","name":"to","nameLocation":"2733:2:26","nodeType":"VariableDeclaration","scope":7164,"src":"2725:10:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7156,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7159,"mutability":"mutable","name":"value","nameLocation":"2745:5:26","nodeType":"VariableDeclaration","scope":7164,"src":"2737:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7158,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:26"},"returnParameters":{"id":7163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7162,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7164,"src":"2770:4:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7161,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:26"},"scope":7165,"src":"2689:87:26","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7166,"src":"203:2575:26","usedErrors":[],"usedEvents":[7099,7108]}],"src":"106:2673:26"},"id":26},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[7165],"IERC20Metadata":[7191]},"id":7192,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7167,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:27"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":7169,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7192,"sourceUnit":7166,"src":"151:37:27","symbolAliases":[{"foreign":{"id":7168,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"159:6:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7171,"name":"IERC20","nameLocations":["305:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"305:6:27"},"id":7172,"nodeType":"InheritanceSpecifier","src":"305:6:27"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":7170,"nodeType":"StructuredDocumentation","src":"190:86:27","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":7191,"linearizedBaseContracts":[7191,7165],"name":"IERC20Metadata","nameLocation":"287:14:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7173,"nodeType":"StructuredDocumentation","src":"318:54:27","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":7178,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:27","nodeType":"FunctionDefinition","parameters":{"id":7174,"nodeType":"ParameterList","parameters":[],"src":"390:2:27"},"returnParameters":{"id":7177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7176,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7178,"src":"416:13:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7175,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:27"},"scope":7191,"src":"377:54:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7179,"nodeType":"StructuredDocumentation","src":"437:56:27","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":7184,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:27","nodeType":"FunctionDefinition","parameters":{"id":7180,"nodeType":"ParameterList","parameters":[],"src":"513:2:27"},"returnParameters":{"id":7183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7182,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7184,"src":"539:13:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7181,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:27","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:27"},"scope":7191,"src":"498:56:27","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7185,"nodeType":"StructuredDocumentation","src":"560:65:27","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":7190,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:27","nodeType":"FunctionDefinition","parameters":{"id":7186,"nodeType":"ParameterList","parameters":[],"src":"647:2:27"},"returnParameters":{"id":7189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7188,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7190,"src":"673:5:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7187,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:27"},"scope":7191,"src":"630:50:27","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7192,"src":"277:405:27","usedErrors":[],"usedEvents":[7099,7108]}],"src":"125:558:27"},"id":27},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[7227]},"id":7228,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7193,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:28"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":7194,"nodeType":"StructuredDocumentation","src":"149:1963:28","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n token.safeTransferFrom(msg.sender, address(this), value);\n ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":7227,"linearizedBaseContracts":[7227],"name":"IERC20Permit","nameLocation":"2123:12:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7195,"nodeType":"StructuredDocumentation","src":"2142:850:28","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":7212,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3006:6:28","nodeType":"FunctionDefinition","parameters":{"id":7210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7197,"mutability":"mutable","name":"owner","nameLocation":"3030:5:28","nodeType":"VariableDeclaration","scope":7212,"src":"3022:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7196,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7199,"mutability":"mutable","name":"spender","nameLocation":"3053:7:28","nodeType":"VariableDeclaration","scope":7212,"src":"3045:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7198,"name":"address","nodeType":"ElementaryTypeName","src":"3045:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7201,"mutability":"mutable","name":"value","nameLocation":"3078:5:28","nodeType":"VariableDeclaration","scope":7212,"src":"3070:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7200,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7203,"mutability":"mutable","name":"deadline","nameLocation":"3101:8:28","nodeType":"VariableDeclaration","scope":7212,"src":"3093:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7202,"name":"uint256","nodeType":"ElementaryTypeName","src":"3093:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7205,"mutability":"mutable","name":"v","nameLocation":"3125:1:28","nodeType":"VariableDeclaration","scope":7212,"src":"3119:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7204,"name":"uint8","nodeType":"ElementaryTypeName","src":"3119:5:28","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7207,"mutability":"mutable","name":"r","nameLocation":"3144:1:28","nodeType":"VariableDeclaration","scope":7212,"src":"3136:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7206,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3136:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7209,"mutability":"mutable","name":"s","nameLocation":"3163:1:28","nodeType":"VariableDeclaration","scope":7212,"src":"3155:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7208,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3155:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3012:158:28"},"returnParameters":{"id":7211,"nodeType":"ParameterList","parameters":[],"src":"3179:0:28"},"scope":7227,"src":"2997:183:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7213,"nodeType":"StructuredDocumentation","src":"3186:294:28","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":7220,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3494:6:28","nodeType":"FunctionDefinition","parameters":{"id":7216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7215,"mutability":"mutable","name":"owner","nameLocation":"3509:5:28","nodeType":"VariableDeclaration","scope":7220,"src":"3501:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7214,"name":"address","nodeType":"ElementaryTypeName","src":"3501:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3500:15:28"},"returnParameters":{"id":7219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7218,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7220,"src":"3539:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7217,"name":"uint256","nodeType":"ElementaryTypeName","src":"3539:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:9:28"},"scope":7227,"src":"3485:63:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7221,"nodeType":"StructuredDocumentation","src":"3554:128:28","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":7226,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3749:16:28","nodeType":"FunctionDefinition","parameters":{"id":7222,"nodeType":"ParameterList","parameters":[],"src":"3765:2:28"},"returnParameters":{"id":7225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7224,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7226,"src":"3791:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7223,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3791:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3790:9:28"},"scope":7227,"src":"3740:60:28","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7228,"src":"2113:1689:28","usedErrors":[],"usedEvents":[]}],"src":"123:3680:28"},"id":28},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"Address":[7770],"IERC20":[7165],"IERC20Permit":[7227],"SafeERC20":[7517]},"id":7518,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7229,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:29"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":7231,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7518,"sourceUnit":7166,"src":"141:37:29","symbolAliases":[{"foreign":{"id":7230,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7165,"src":"149:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","id":7233,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7518,"sourceUnit":7228,"src":"179:60:29","symbolAliases":[{"foreign":{"id":7232,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7227,"src":"187:12:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../../utils/Address.sol","id":7235,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7518,"sourceUnit":7771,"src":"240:51:29","symbolAliases":[{"foreign":{"id":7234,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7770,"src":"248:7:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":7236,"nodeType":"StructuredDocumentation","src":"293:457:29","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":7517,"linearizedBaseContracts":[7517],"name":"SafeERC20","nameLocation":"759:9:29","nodeType":"ContractDefinition","nodes":[{"global":false,"id":7239,"libraryName":{"id":7237,"name":"Address","nameLocations":["781:7:29"],"nodeType":"IdentifierPath","referencedDeclaration":7770,"src":"781:7:29"},"nodeType":"UsingForDirective","src":"775:26:29","typeName":{"id":7238,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"documentation":{"id":7240,"nodeType":"StructuredDocumentation","src":"807:64:29","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","id":7244,"name":"SafeERC20FailedOperation","nameLocation":"882:24:29","nodeType":"ErrorDefinition","parameters":{"id":7243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7242,"mutability":"mutable","name":"token","nameLocation":"915:5:29","nodeType":"VariableDeclaration","scope":7244,"src":"907:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7241,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:29"},"src":"876:46:29"},{"documentation":{"id":7245,"nodeType":"StructuredDocumentation","src":"928:71:29","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":7253,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:29","nodeType":"ErrorDefinition","parameters":{"id":7252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7247,"mutability":"mutable","name":"spender","nameLocation":"1051:7:29","nodeType":"VariableDeclaration","scope":7253,"src":"1043:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7246,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7249,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:29","nodeType":"VariableDeclaration","scope":7253,"src":"1060:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7248,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7251,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:29","nodeType":"VariableDeclaration","scope":7253,"src":"1086:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7250,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:29"},"src":"1004:109:29"},{"body":{"id":7276,"nodeType":"Block","src":"1375:88:29","statements":[{"expression":{"arguments":[{"id":7265,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7257,"src":"1405:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":7268,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7257,"src":"1427:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":7269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:29","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":7132,"src":"1427:14:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":7270,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7259,"src":"1444:2:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7271,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7261,"src":"1448:5:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7272,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:29","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":7266,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:29","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7267,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:29","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:29","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7264,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7467,"src":"1385:19:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":7274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7275,"nodeType":"ExpressionStatement","src":"1385:71:29"}]},"documentation":{"id":7254,"nodeType":"StructuredDocumentation","src":"1119:179:29","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":7277,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1312:12:29","nodeType":"FunctionDefinition","parameters":{"id":7262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7257,"mutability":"mutable","name":"token","nameLocation":"1332:5:29","nodeType":"VariableDeclaration","scope":7277,"src":"1325:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":7256,"nodeType":"UserDefinedTypeName","pathNode":{"id":7255,"name":"IERC20","nameLocations":["1325:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"1325:6:29"},"referencedDeclaration":7165,"src":"1325:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7259,"mutability":"mutable","name":"to","nameLocation":"1347:2:29","nodeType":"VariableDeclaration","scope":7277,"src":"1339:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7258,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7261,"mutability":"mutable","name":"value","nameLocation":"1359:5:29","nodeType":"VariableDeclaration","scope":7277,"src":"1351:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7260,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:29"},"returnParameters":{"id":7263,"nodeType":"ParameterList","parameters":[],"src":"1375:0:29"},"scope":7517,"src":"1303:160:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7303,"nodeType":"Block","src":"1792:98:29","statements":[{"expression":{"arguments":[{"id":7291,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7281,"src":"1822:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":7294,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7281,"src":"1844:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":7295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:29","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":7164,"src":"1844:18:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":7296,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7283,"src":"1865:4:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7297,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7285,"src":"1871:2:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7298,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7287,"src":"1875:5:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7299,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:29","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":7292,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:29","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7293,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:29","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:29","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7290,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7467,"src":"1802:19:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":7301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7302,"nodeType":"ExpressionStatement","src":"1802:81:29"}]},"documentation":{"id":7278,"nodeType":"StructuredDocumentation","src":"1469:228:29","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":7304,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1711:16:29","nodeType":"FunctionDefinition","parameters":{"id":7288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7281,"mutability":"mutable","name":"token","nameLocation":"1735:5:29","nodeType":"VariableDeclaration","scope":7304,"src":"1728:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":7280,"nodeType":"UserDefinedTypeName","pathNode":{"id":7279,"name":"IERC20","nameLocations":["1728:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"1728:6:29"},"referencedDeclaration":7165,"src":"1728:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7283,"mutability":"mutable","name":"from","nameLocation":"1750:4:29","nodeType":"VariableDeclaration","scope":7304,"src":"1742:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7282,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7285,"mutability":"mutable","name":"to","nameLocation":"1764:2:29","nodeType":"VariableDeclaration","scope":7304,"src":"1756:10:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7284,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7287,"mutability":"mutable","name":"value","nameLocation":"1776:5:29","nodeType":"VariableDeclaration","scope":7304,"src":"1768:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7286,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:29"},"returnParameters":{"id":7289,"nodeType":"ParameterList","parameters":[],"src":"1792:0:29"},"scope":7517,"src":"1702:188:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7334,"nodeType":"Block","src":"2167:139:29","statements":[{"assignments":[7316],"declarations":[{"constant":false,"id":7316,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:29","nodeType":"VariableDeclaration","scope":7334,"src":"2177:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7315,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7325,"initialValue":{"arguments":[{"arguments":[{"id":7321,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$7517","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$7517","typeString":"library SafeERC20"}],"id":7320,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7319,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:29","typeDescriptions":{}}},"id":7322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7323,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7310,"src":"2231:7:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7317,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7308,"src":"2200:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":7318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:29","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":7142,"src":"2200:15:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":7324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:29"},{"expression":{"arguments":[{"id":7327,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7308,"src":"2262:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"id":7328,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7310,"src":"2269:7:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7329,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7316,"src":"2278:12:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":7330,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7312,"src":"2293:5:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7326,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7425,"src":"2249:12:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":7332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7333,"nodeType":"ExpressionStatement","src":"2249:50:29"}]},"documentation":{"id":7305,"nodeType":"StructuredDocumentation","src":"1896:180:29","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":7335,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:29","nodeType":"FunctionDefinition","parameters":{"id":7313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7308,"mutability":"mutable","name":"token","nameLocation":"2119:5:29","nodeType":"VariableDeclaration","scope":7335,"src":"2112:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":7307,"nodeType":"UserDefinedTypeName","pathNode":{"id":7306,"name":"IERC20","nameLocations":["2112:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2112:6:29"},"referencedDeclaration":7165,"src":"2112:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7310,"mutability":"mutable","name":"spender","nameLocation":"2134:7:29","nodeType":"VariableDeclaration","scope":7335,"src":"2126:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7309,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7312,"mutability":"mutable","name":"value","nameLocation":"2151:5:29","nodeType":"VariableDeclaration","scope":7335,"src":"2143:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7311,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:29"},"returnParameters":{"id":7314,"nodeType":"ParameterList","parameters":[],"src":"2167:0:29"},"scope":7517,"src":"2081:225:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7377,"nodeType":"Block","src":"2607:370:29","statements":[{"id":7376,"nodeType":"UncheckedBlock","src":"2617:354:29","statements":[{"assignments":[7347],"declarations":[{"constant":false,"id":7347,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:29","nodeType":"VariableDeclaration","scope":7376,"src":"2641:24:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7346,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7356,"initialValue":{"arguments":[{"arguments":[{"id":7352,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$7517","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$7517","typeString":"library SafeERC20"}],"id":7351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7350,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:29","typeDescriptions":{}}},"id":7353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7354,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7341,"src":"2699:7:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7348,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7339,"src":"2668:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":7349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:29","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":7142,"src":"2668:15:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":7355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:29"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7357,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7347,"src":"2725:16:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7358,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"2744:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7367,"nodeType":"IfStatement","src":"2721:160:29","trueBody":{"id":7366,"nodeType":"Block","src":"2763:118:29","statements":[{"errorCall":{"arguments":[{"id":7361,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7341,"src":"2821:7:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7362,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7347,"src":"2830:16:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7363,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"2848:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7360,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7253,"src":"2788:32:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":7364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7365,"nodeType":"RevertStatement","src":"2781:85:29"}]}},{"expression":{"arguments":[{"id":7369,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7339,"src":"2907:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"id":7370,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7341,"src":"2914:7:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7371,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7347,"src":"2923:16:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7372,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7343,"src":"2942:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7368,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7425,"src":"2894:12:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":7374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7375,"nodeType":"ExpressionStatement","src":"2894:66:29"}]}]},"documentation":{"id":7336,"nodeType":"StructuredDocumentation","src":"2312:192:29","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful."},"id":7378,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:29","nodeType":"FunctionDefinition","parameters":{"id":7344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7339,"mutability":"mutable","name":"token","nameLocation":"2547:5:29","nodeType":"VariableDeclaration","scope":7378,"src":"2540:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":7338,"nodeType":"UserDefinedTypeName","pathNode":{"id":7337,"name":"IERC20","nameLocations":["2540:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"2540:6:29"},"referencedDeclaration":7165,"src":"2540:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7341,"mutability":"mutable","name":"spender","nameLocation":"2562:7:29","nodeType":"VariableDeclaration","scope":7378,"src":"2554:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7340,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7343,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:29","nodeType":"VariableDeclaration","scope":7378,"src":"2571:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7342,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:29"},"returnParameters":{"id":7345,"nodeType":"ParameterList","parameters":[],"src":"2607:0:29"},"scope":7517,"src":"2509:468:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7424,"nodeType":"Block","src":"3373:303:29","statements":[{"assignments":[7390],"declarations":[{"constant":false,"id":7390,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:29","nodeType":"VariableDeclaration","scope":7424,"src":"3383:25:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7389,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7399,"initialValue":{"arguments":[{"expression":{"id":7393,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7382,"src":"3426:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":7394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:29","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":7152,"src":"3426:13:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":7395,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7384,"src":"3442:7:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7396,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7386,"src":"3451:5:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7397,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:29","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":7391,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:29","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7392,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:29","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:29","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:29"},{"condition":{"id":7404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:29","subExpression":{"arguments":[{"id":7401,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7382,"src":"3498:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"id":7402,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7390,"src":"3505:12:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7400,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7516,"src":"3474:23:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":7403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7423,"nodeType":"IfStatement","src":"3469:201:29","trueBody":{"id":7422,"nodeType":"Block","src":"3520:150:29","statements":[{"expression":{"arguments":[{"id":7406,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7382,"src":"3554:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":7409,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7382,"src":"3576:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"id":7410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3582:7:29","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":7152,"src":"3576:13:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":7411,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7384,"src":"3592:7:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":7412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3601:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":7413,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3591:12:29","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":7407,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3561:3:29","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3565:10:29","memberName":"encodeCall","nodeType":"MemberAccess","src":"3561:14:29","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":7414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:43:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7405,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7467,"src":"3534:19:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":7415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3534:71:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7416,"nodeType":"ExpressionStatement","src":"3534:71:29"},{"expression":{"arguments":[{"id":7418,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7382,"src":"3639:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},{"id":7419,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7390,"src":"3646:12:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7417,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7467,"src":"3619:19:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$7165_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":7420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:40:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7421,"nodeType":"ExpressionStatement","src":"3619:40:29"}]}}]},"documentation":{"id":7379,"nodeType":"StructuredDocumentation","src":"2983:308:29","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT."},"id":7425,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3305:12:29","nodeType":"FunctionDefinition","parameters":{"id":7387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7382,"mutability":"mutable","name":"token","nameLocation":"3325:5:29","nodeType":"VariableDeclaration","scope":7425,"src":"3318:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":7381,"nodeType":"UserDefinedTypeName","pathNode":{"id":7380,"name":"IERC20","nameLocations":["3318:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"3318:6:29"},"referencedDeclaration":7165,"src":"3318:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7384,"mutability":"mutable","name":"spender","nameLocation":"3340:7:29","nodeType":"VariableDeclaration","scope":7425,"src":"3332:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7383,"name":"address","nodeType":"ElementaryTypeName","src":"3332:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7386,"mutability":"mutable","name":"value","nameLocation":"3357:5:29","nodeType":"VariableDeclaration","scope":7425,"src":"3349:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7385,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3317:46:29"},"returnParameters":{"id":7388,"nodeType":"ParameterList","parameters":[],"src":"3373:0:29"},"scope":7517,"src":"3296:380:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7466,"nodeType":"Block","src":"4129:559:29","statements":[{"assignments":[7435],"declarations":[{"constant":false,"id":7435,"mutability":"mutable","name":"returndata","nameLocation":"4491:10:29","nodeType":"VariableDeclaration","scope":7466,"src":"4478:23:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7434,"name":"bytes","nodeType":"ElementaryTypeName","src":"4478:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7443,"initialValue":{"arguments":[{"id":7441,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7431,"src":"4532:4:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":7438,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"4512:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}],"id":7437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4504:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7436,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:29","typeDescriptions":{}}},"id":7439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:14:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4519:12:29","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":7591,"src":"4504:27:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":7442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:33:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4478:59:29"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7444,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7435,"src":"4551:10:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4562:6:29","memberName":"length","nodeType":"MemberAccess","src":"4551:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4572:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4551:22:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":7455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4577:31:29","subExpression":{"arguments":[{"id":7450,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7435,"src":"4589:10:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":7452,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:4:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":7451,"name":"bool","nodeType":"ElementaryTypeName","src":"4602:4:29","typeDescriptions":{}}}],"id":7453,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:6:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":7448,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4578:3:29","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4582:6:29","memberName":"decode","nodeType":"MemberAccess","src":"4578:10:29","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":7454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4578:30:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4551:57:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7465,"nodeType":"IfStatement","src":"4547:135:29","trueBody":{"id":7464,"nodeType":"Block","src":"4610:72:29","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7460,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"4664:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}],"id":7459,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4656:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7458,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:29","typeDescriptions":{}}},"id":7461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:14:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7457,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7244,"src":"4631:24:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4631:40:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7463,"nodeType":"RevertStatement","src":"4624:47:29"}]}}]},"documentation":{"id":7426,"nodeType":"StructuredDocumentation","src":"3682:372:29","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":7467,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4068:19:29","nodeType":"FunctionDefinition","parameters":{"id":7432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7429,"mutability":"mutable","name":"token","nameLocation":"4095:5:29","nodeType":"VariableDeclaration","scope":7467,"src":"4088:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":7428,"nodeType":"UserDefinedTypeName","pathNode":{"id":7427,"name":"IERC20","nameLocations":["4088:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"4088:6:29"},"referencedDeclaration":7165,"src":"4088:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7431,"mutability":"mutable","name":"data","nameLocation":"4115:4:29","nodeType":"VariableDeclaration","scope":7467,"src":"4102:17:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7430,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4087:33:29"},"returnParameters":{"id":7433,"nodeType":"ParameterList","parameters":[],"src":"4129:0:29"},"scope":7517,"src":"4059:629:29","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":7515,"nodeType":"Block","src":"5278:489:29","statements":[{"assignments":[7479,7481],"declarations":[{"constant":false,"id":7479,"mutability":"mutable","name":"success","nameLocation":"5579:7:29","nodeType":"VariableDeclaration","scope":7515,"src":"5574:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7478,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7481,"mutability":"mutable","name":"returndata","nameLocation":"5601:10:29","nodeType":"VariableDeclaration","scope":7515,"src":"5588:23:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7480,"name":"bytes","nodeType":"ElementaryTypeName","src":"5588:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7489,"initialValue":{"arguments":[{"id":7487,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7473,"src":"5635:4:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":7484,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7471,"src":"5623:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}],"id":7483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5615:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7482,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:29","typeDescriptions":{}}},"id":7485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:14:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5630:4:29","memberName":"call","nodeType":"MemberAccess","src":"5615:19:29","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5573:67:29"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7490,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7479,"src":"5657:7:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7491,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7481,"src":"5669:10:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5680:6:29","memberName":"length","nodeType":"MemberAccess","src":"5669:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5669:22:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":7497,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7481,"src":"5706:10:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":7499,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5719:4:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":7498,"name":"bool","nodeType":"ElementaryTypeName","src":"5719:4:29","typeDescriptions":{}}}],"id":7500,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5718:6:29","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":7495,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5695:3:29","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":7496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5699:6:29","memberName":"decode","nodeType":"MemberAccess","src":"5695:10:29","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":7501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5695:30:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5669:56:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":7503,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5668:58:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:69:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":7507,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7471,"src":"5738:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}],"id":7506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5730:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7505,"name":"address","nodeType":"ElementaryTypeName","src":"5730:7:29","typeDescriptions":{}}},"id":7508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5730:14:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:4:29","memberName":"code","nodeType":"MemberAccess","src":"5730:19:29","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5750:6:29","memberName":"length","nodeType":"MemberAccess","src":"5730:26:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5759:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5730:30:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:103:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7477,"id":7514,"nodeType":"Return","src":"5650:110:29"}]},"documentation":{"id":7468,"nodeType":"StructuredDocumentation","src":"4694:490:29","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"id":7516,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5198:23:29","nodeType":"FunctionDefinition","parameters":{"id":7474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7471,"mutability":"mutable","name":"token","nameLocation":"5229:5:29","nodeType":"VariableDeclaration","scope":7516,"src":"5222:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"},"typeName":{"id":7470,"nodeType":"UserDefinedTypeName","pathNode":{"id":7469,"name":"IERC20","nameLocations":["5222:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":7165,"src":"5222:6:29"},"referencedDeclaration":7165,"src":"5222:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7165","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":7473,"mutability":"mutable","name":"data","nameLocation":"5249:4:29","nodeType":"VariableDeclaration","scope":7516,"src":"5236:17:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7472,"name":"bytes","nodeType":"ElementaryTypeName","src":"5236:5:29","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5221:33:29"},"returnParameters":{"id":7477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7476,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7516,"src":"5272:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7475,"name":"bool","nodeType":"ElementaryTypeName","src":"5272:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5271:6:29"},"scope":7517,"src":"5189:578:29","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":7518,"src":"751:5018:29","usedErrors":[7244,7253],"usedEvents":[]}],"src":"115:5655:29"},"id":29},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[7770]},"id":7771,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7519,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:30"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":7520,"nodeType":"StructuredDocumentation","src":"127:67:30","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":7770,"linearizedBaseContracts":[7770],"name":"Address","nameLocation":"203:7:30","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7521,"nodeType":"StructuredDocumentation","src":"217:94:30","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cd786059","id":7525,"name":"AddressInsufficientBalance","nameLocation":"322:26:30","nodeType":"ErrorDefinition","parameters":{"id":7524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7523,"mutability":"mutable","name":"account","nameLocation":"357:7:30","nodeType":"VariableDeclaration","scope":7525,"src":"349:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7522,"name":"address","nodeType":"ElementaryTypeName","src":"349:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"348:17:30"},"src":"316:50:30"},{"documentation":{"id":7526,"nodeType":"StructuredDocumentation","src":"372:75:30","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":7530,"name":"AddressEmptyCode","nameLocation":"458:16:30","nodeType":"ErrorDefinition","parameters":{"id":7529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7528,"mutability":"mutable","name":"target","nameLocation":"483:6:30","nodeType":"VariableDeclaration","scope":7530,"src":"475:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7527,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"474:16:30"},"src":"452:39:30"},{"documentation":{"id":7531,"nodeType":"StructuredDocumentation","src":"497:89:30","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"1425ea42","id":7533,"name":"FailedInnerCall","nameLocation":"597:15:30","nodeType":"ErrorDefinition","parameters":{"id":7532,"nodeType":"ParameterList","parameters":[],"src":"612:2:30"},"src":"591:24:30"},{"body":{"id":7573,"nodeType":"Block","src":"1602:260:30","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":7543,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1624:4:30","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7770","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7770","typeString":"library Address"}],"id":7542,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1616:7:30","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7541,"name":"address","nodeType":"ElementaryTypeName","src":"1616:7:30","typeDescriptions":{}}},"id":7544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1616:13:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1630:7:30","memberName":"balance","nodeType":"MemberAccess","src":"1616:21:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7546,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7538,"src":"1640:6:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1616:30:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7556,"nodeType":"IfStatement","src":"1612:109:30","trueBody":{"id":7555,"nodeType":"Block","src":"1648:73:30","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7551,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1704:4:30","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7770","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7770","typeString":"library Address"}],"id":7550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1696:7:30","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7549,"name":"address","nodeType":"ElementaryTypeName","src":"1696:7:30","typeDescriptions":{}}},"id":7552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1696:13:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7548,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7525,"src":"1669:26:30","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1669:41:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7554,"nodeType":"RevertStatement","src":"1662:48:30"}]}},{"assignments":[7558,null],"declarations":[{"constant":false,"id":7558,"mutability":"mutable","name":"success","nameLocation":"1737:7:30","nodeType":"VariableDeclaration","scope":7573,"src":"1732:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7557,"name":"bool","nodeType":"ElementaryTypeName","src":"1732:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":7565,"initialValue":{"arguments":[{"hexValue":"","id":7563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1780:2:30","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":7559,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7536,"src":"1750:9:30","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":7560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1760:4:30","memberName":"call","nodeType":"MemberAccess","src":"1750:14:30","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":7561,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7538,"src":"1772:6:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1750:29:30","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1750:33:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1731:52:30"},{"condition":{"id":7567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:8:30","subExpression":{"id":7566,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7558,"src":"1798:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7572,"nodeType":"IfStatement","src":"1793:63:30","trueBody":{"id":7571,"nodeType":"Block","src":"1807:49:30","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7568,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7533,"src":"1828:15:30","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:17:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7570,"nodeType":"RevertStatement","src":"1821:24:30"}]}}]},"documentation":{"id":7534,"nodeType":"StructuredDocumentation","src":"621:905:30","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\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 https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":7574,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1540:9:30","nodeType":"FunctionDefinition","parameters":{"id":7539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7536,"mutability":"mutable","name":"recipient","nameLocation":"1566:9:30","nodeType":"VariableDeclaration","scope":7574,"src":"1550:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":7535,"name":"address","nodeType":"ElementaryTypeName","src":"1550:15:30","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":7538,"mutability":"mutable","name":"amount","nameLocation":"1585:6:30","nodeType":"VariableDeclaration","scope":7574,"src":"1577:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7537,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1549:43:30"},"returnParameters":{"id":7540,"nodeType":"ParameterList","parameters":[],"src":"1602:0:30"},"scope":7770,"src":"1531:331:30","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7590,"nodeType":"Block","src":"2794:62:30","statements":[{"expression":{"arguments":[{"id":7585,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7577,"src":"2833:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7586,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7579,"src":"2841:4:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":7587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2847:1:30","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7584,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"2811:21:30","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":7588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2811:38:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7583,"id":7589,"nodeType":"Return","src":"2804:45:30"}]},"documentation":{"id":7575,"nodeType":"StructuredDocumentation","src":"1868:832:30","text":" @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 If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\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 Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":7591,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2714:12:30","nodeType":"FunctionDefinition","parameters":{"id":7580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7577,"mutability":"mutable","name":"target","nameLocation":"2735:6:30","nodeType":"VariableDeclaration","scope":7591,"src":"2727:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7576,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7579,"mutability":"mutable","name":"data","nameLocation":"2756:4:30","nodeType":"VariableDeclaration","scope":7591,"src":"2743:17:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7578,"name":"bytes","nodeType":"ElementaryTypeName","src":"2743:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2726:35:30"},"returnParameters":{"id":7583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7582,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7591,"src":"2780:12:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7581,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2779:14:30"},"scope":7770,"src":"2705:151:30","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7636,"nodeType":"Block","src":"3293:279:30","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":7605,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3315:4:30","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7770","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7770","typeString":"library Address"}],"id":7604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3307:7:30","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7603,"name":"address","nodeType":"ElementaryTypeName","src":"3307:7:30","typeDescriptions":{}}},"id":7606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3307:13:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3321:7:30","memberName":"balance","nodeType":"MemberAccess","src":"3307:21:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7608,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7598,"src":"3331:5:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:29:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7618,"nodeType":"IfStatement","src":"3303:108:30","trueBody":{"id":7617,"nodeType":"Block","src":"3338:73:30","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7613,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3394:4:30","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7770","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7770","typeString":"library Address"}],"id":7612,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3386:7:30","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7611,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:30","typeDescriptions":{}}},"id":7614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3386:13:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7610,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7525,"src":"3359:26:30","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3359:41:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7616,"nodeType":"RevertStatement","src":"3352:48:30"}]}},{"assignments":[7620,7622],"declarations":[{"constant":false,"id":7620,"mutability":"mutable","name":"success","nameLocation":"3426:7:30","nodeType":"VariableDeclaration","scope":7636,"src":"3421:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7619,"name":"bool","nodeType":"ElementaryTypeName","src":"3421:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7622,"mutability":"mutable","name":"returndata","nameLocation":"3448:10:30","nodeType":"VariableDeclaration","scope":7636,"src":"3435:23:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7621,"name":"bytes","nodeType":"ElementaryTypeName","src":"3435:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7629,"initialValue":{"arguments":[{"id":7627,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7596,"src":"3488:4:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7623,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7594,"src":"3462:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3469:4:30","memberName":"call","nodeType":"MemberAccess","src":"3462:11:30","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":7625,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7598,"src":"3481:5:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3462:25:30","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:31:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3420:73:30"},{"expression":{"arguments":[{"id":7631,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7594,"src":"3537:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7632,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7620,"src":"3545:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7633,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7622,"src":"3554:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7630,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7729,"src":"3510:26:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3510:55:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7602,"id":7635,"nodeType":"Return","src":"3503:62:30"}]},"documentation":{"id":7592,"nodeType":"StructuredDocumentation","src":"2862:313:30","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":7637,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3189:21:30","nodeType":"FunctionDefinition","parameters":{"id":7599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7594,"mutability":"mutable","name":"target","nameLocation":"3219:6:30","nodeType":"VariableDeclaration","scope":7637,"src":"3211:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7593,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7596,"mutability":"mutable","name":"data","nameLocation":"3240:4:30","nodeType":"VariableDeclaration","scope":7637,"src":"3227:17:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7595,"name":"bytes","nodeType":"ElementaryTypeName","src":"3227:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":7598,"mutability":"mutable","name":"value","nameLocation":"3254:5:30","nodeType":"VariableDeclaration","scope":7637,"src":"3246:13:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7597,"name":"uint256","nodeType":"ElementaryTypeName","src":"3246:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3210:50:30"},"returnParameters":{"id":7602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7601,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7637,"src":"3279:12:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7600,"name":"bytes","nodeType":"ElementaryTypeName","src":"3279:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3278:14:30"},"scope":7770,"src":"3180:392:30","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7662,"nodeType":"Block","src":"3811:154:30","statements":[{"assignments":[7648,7650],"declarations":[{"constant":false,"id":7648,"mutability":"mutable","name":"success","nameLocation":"3827:7:30","nodeType":"VariableDeclaration","scope":7662,"src":"3822:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7647,"name":"bool","nodeType":"ElementaryTypeName","src":"3822:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7650,"mutability":"mutable","name":"returndata","nameLocation":"3849:10:30","nodeType":"VariableDeclaration","scope":7662,"src":"3836:23:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7649,"name":"bytes","nodeType":"ElementaryTypeName","src":"3836:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7655,"initialValue":{"arguments":[{"id":7653,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7642,"src":"3881:4:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7651,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7640,"src":"3863:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3870:10:30","memberName":"staticcall","nodeType":"MemberAccess","src":"3863:17:30","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":7654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3863:23:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3821:65:30"},{"expression":{"arguments":[{"id":7657,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7640,"src":"3930:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7658,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7648,"src":"3938:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7659,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7650,"src":"3947:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7656,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7729,"src":"3903:26:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3903:55:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7646,"id":7661,"nodeType":"Return","src":"3896:62:30"}]},"documentation":{"id":7638,"nodeType":"StructuredDocumentation","src":"3578:128:30","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":7663,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3720:18:30","nodeType":"FunctionDefinition","parameters":{"id":7643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7640,"mutability":"mutable","name":"target","nameLocation":"3747:6:30","nodeType":"VariableDeclaration","scope":7663,"src":"3739:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7639,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7642,"mutability":"mutable","name":"data","nameLocation":"3768:4:30","nodeType":"VariableDeclaration","scope":7663,"src":"3755:17:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7641,"name":"bytes","nodeType":"ElementaryTypeName","src":"3755:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3738:35:30"},"returnParameters":{"id":7646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7645,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7663,"src":"3797:12:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7644,"name":"bytes","nodeType":"ElementaryTypeName","src":"3797:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3796:14:30"},"scope":7770,"src":"3711:254:30","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7688,"nodeType":"Block","src":"4203:156:30","statements":[{"assignments":[7674,7676],"declarations":[{"constant":false,"id":7674,"mutability":"mutable","name":"success","nameLocation":"4219:7:30","nodeType":"VariableDeclaration","scope":7688,"src":"4214:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7673,"name":"bool","nodeType":"ElementaryTypeName","src":"4214:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7676,"mutability":"mutable","name":"returndata","nameLocation":"4241:10:30","nodeType":"VariableDeclaration","scope":7688,"src":"4228:23:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7675,"name":"bytes","nodeType":"ElementaryTypeName","src":"4228:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7681,"initialValue":{"arguments":[{"id":7679,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7668,"src":"4275:4:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7677,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"4255:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4262:12:30","memberName":"delegatecall","nodeType":"MemberAccess","src":"4255:19:30","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":7680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4255:25:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4213:67:30"},{"expression":{"arguments":[{"id":7683,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7666,"src":"4324:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7684,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7674,"src":"4332:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7685,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7676,"src":"4341:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7682,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7729,"src":"4297:26:30","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:55:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7672,"id":7687,"nodeType":"Return","src":"4290:62:30"}]},"documentation":{"id":7664,"nodeType":"StructuredDocumentation","src":"3971:130:30","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":7689,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"4115:20:30","nodeType":"FunctionDefinition","parameters":{"id":7669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7666,"mutability":"mutable","name":"target","nameLocation":"4144:6:30","nodeType":"VariableDeclaration","scope":7689,"src":"4136:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7665,"name":"address","nodeType":"ElementaryTypeName","src":"4136:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7668,"mutability":"mutable","name":"data","nameLocation":"4165:4:30","nodeType":"VariableDeclaration","scope":7689,"src":"4152:17:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7667,"name":"bytes","nodeType":"ElementaryTypeName","src":"4152:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4135:35:30"},"returnParameters":{"id":7672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7671,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7689,"src":"4189:12:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7670,"name":"bytes","nodeType":"ElementaryTypeName","src":"4189:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4188:14:30"},"scope":7770,"src":"4106:253:30","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7728,"nodeType":"Block","src":"4783:424:30","statements":[{"condition":{"id":7702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4797:8:30","subExpression":{"id":7701,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7694,"src":"4798:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7726,"nodeType":"Block","src":"4857:344:30","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7708,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7696,"src":"5045:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5056:6:30","memberName":"length","nodeType":"MemberAccess","src":"5045:17:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5066:1:30","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5045:22:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":7712,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7692,"src":"5071:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5078:4:30","memberName":"code","nodeType":"MemberAccess","src":"5071:11:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5083:6:30","memberName":"length","nodeType":"MemberAccess","src":"5071:18:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5093:1:30","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5071:23:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5045:49:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7723,"nodeType":"IfStatement","src":"5041:119:30","trueBody":{"id":7722,"nodeType":"Block","src":"5096:64:30","statements":[{"errorCall":{"arguments":[{"id":7719,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7692,"src":"5138:6:30","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7718,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7530,"src":"5121:16:30","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5121:24:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7721,"nodeType":"RevertStatement","src":"5114:31:30"}]}},{"expression":{"id":7724,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7696,"src":"5180:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7700,"id":7725,"nodeType":"Return","src":"5173:17:30"}]},"id":7727,"nodeType":"IfStatement","src":"4793:408:30","trueBody":{"id":7707,"nodeType":"Block","src":"4807:44:30","statements":[{"expression":{"arguments":[{"id":7704,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7696,"src":"4829:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7703,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7769,"src":"4821:7:30","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4821:19:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7706,"nodeType":"ExpressionStatement","src":"4821:19:30"}]}}]},"documentation":{"id":7690,"nodeType":"StructuredDocumentation","src":"4365:255:30","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call."},"id":7729,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4634:26:30","nodeType":"FunctionDefinition","parameters":{"id":7697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7692,"mutability":"mutable","name":"target","nameLocation":"4678:6:30","nodeType":"VariableDeclaration","scope":7729,"src":"4670:14:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7691,"name":"address","nodeType":"ElementaryTypeName","src":"4670:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7694,"mutability":"mutable","name":"success","nameLocation":"4699:7:30","nodeType":"VariableDeclaration","scope":7729,"src":"4694:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7693,"name":"bool","nodeType":"ElementaryTypeName","src":"4694:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7696,"mutability":"mutable","name":"returndata","nameLocation":"4729:10:30","nodeType":"VariableDeclaration","scope":7729,"src":"4716:23:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7695,"name":"bytes","nodeType":"ElementaryTypeName","src":"4716:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4660:85:30"},"returnParameters":{"id":7700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7699,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7729,"src":"4769:12:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7698,"name":"bytes","nodeType":"ElementaryTypeName","src":"4769:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4768:14:30"},"scope":7770,"src":"4625:582:30","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7750,"nodeType":"Block","src":"5509:122:30","statements":[{"condition":{"id":7740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5523:8:30","subExpression":{"id":7739,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7732,"src":"5524:7:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7748,"nodeType":"Block","src":"5583:42:30","statements":[{"expression":{"id":7746,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7734,"src":"5604:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7738,"id":7747,"nodeType":"Return","src":"5597:17:30"}]},"id":7749,"nodeType":"IfStatement","src":"5519:106:30","trueBody":{"id":7745,"nodeType":"Block","src":"5533:44:30","statements":[{"expression":{"arguments":[{"id":7742,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7734,"src":"5555:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7741,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7769,"src":"5547:7:30","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5547:19:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7744,"nodeType":"ExpressionStatement","src":"5547:19:30"}]}}]},"documentation":{"id":7730,"nodeType":"StructuredDocumentation","src":"5213:189:30","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error."},"id":7751,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5416:16:30","nodeType":"FunctionDefinition","parameters":{"id":7735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7732,"mutability":"mutable","name":"success","nameLocation":"5438:7:30","nodeType":"VariableDeclaration","scope":7751,"src":"5433:12:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7731,"name":"bool","nodeType":"ElementaryTypeName","src":"5433:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7734,"mutability":"mutable","name":"returndata","nameLocation":"5460:10:30","nodeType":"VariableDeclaration","scope":7751,"src":"5447:23:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7733,"name":"bytes","nodeType":"ElementaryTypeName","src":"5447:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5432:39:30"},"returnParameters":{"id":7738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7751,"src":"5495:12:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7736,"name":"bytes","nodeType":"ElementaryTypeName","src":"5495:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5494:14:30"},"scope":7770,"src":"5407:224:30","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7768,"nodeType":"Block","src":"5798:461:30","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7757,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7754,"src":"5874:10:30","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5885:6:30","memberName":"length","nodeType":"MemberAccess","src":"5874:17:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5894:1:30","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5874:21:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7766,"nodeType":"Block","src":"6204:49:30","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7763,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7533,"src":"6225:15:30","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6225:17:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7765,"nodeType":"RevertStatement","src":"6218:24:30"}]},"id":7767,"nodeType":"IfStatement","src":"5870:383:30","trueBody":{"id":7762,"nodeType":"Block","src":"5897:301:30","statements":[{"AST":{"nativeSrc":"6055:133:30","nodeType":"YulBlock","src":"6055:133:30","statements":[{"nativeSrc":"6073:40:30","nodeType":"YulVariableDeclaration","src":"6073:40:30","value":{"arguments":[{"name":"returndata","nativeSrc":"6102:10:30","nodeType":"YulIdentifier","src":"6102:10:30"}],"functionName":{"name":"mload","nativeSrc":"6096:5:30","nodeType":"YulIdentifier","src":"6096:5:30"},"nativeSrc":"6096:17:30","nodeType":"YulFunctionCall","src":"6096:17:30"},"variables":[{"name":"returndata_size","nativeSrc":"6077:15:30","nodeType":"YulTypedName","src":"6077:15:30","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6141:2:30","nodeType":"YulLiteral","src":"6141:2:30","type":"","value":"32"},{"name":"returndata","nativeSrc":"6145:10:30","nodeType":"YulIdentifier","src":"6145:10:30"}],"functionName":{"name":"add","nativeSrc":"6137:3:30","nodeType":"YulIdentifier","src":"6137:3:30"},"nativeSrc":"6137:19:30","nodeType":"YulFunctionCall","src":"6137:19:30"},{"name":"returndata_size","nativeSrc":"6158:15:30","nodeType":"YulIdentifier","src":"6158:15:30"}],"functionName":{"name":"revert","nativeSrc":"6130:6:30","nodeType":"YulIdentifier","src":"6130:6:30"},"nativeSrc":"6130:44:30","nodeType":"YulFunctionCall","src":"6130:44:30"},"nativeSrc":"6130:44:30","nodeType":"YulExpressionStatement","src":"6130:44:30"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7754,"isOffset":false,"isSlot":false,"src":"6102:10:30","valueSize":1},{"declaration":7754,"isOffset":false,"isSlot":false,"src":"6145:10:30","valueSize":1}],"id":7761,"nodeType":"InlineAssembly","src":"6046:142:30"}]}}]},"documentation":{"id":7752,"nodeType":"StructuredDocumentation","src":"5637:101:30","text":" @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}."},"id":7769,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5752:7:30","nodeType":"FunctionDefinition","parameters":{"id":7755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7754,"mutability":"mutable","name":"returndata","nameLocation":"5773:10:30","nodeType":"VariableDeclaration","scope":7769,"src":"5760:23:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7753,"name":"bytes","nodeType":"ElementaryTypeName","src":"5760:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5759:25:30"},"returnParameters":{"id":7756,"nodeType":"ParameterList","parameters":[],"src":"5798:0:30"},"scope":7770,"src":"5743:516:30","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":7771,"src":"195:6066:30","usedErrors":[7525,7530,7533],"usedEvents":[]}],"src":"101:6161:30"},"id":30},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[9525]},"id":9526,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7772,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:31"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":7773,"nodeType":"StructuredDocumentation","src":"218:545:31","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":9525,"linearizedBaseContracts":[9525],"name":"SafeCast","nameLocation":"772:8:31","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7774,"nodeType":"StructuredDocumentation","src":"787:68:31","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":7780,"name":"SafeCastOverflowedUintDowncast","nameLocation":"866:30:31","nodeType":"ErrorDefinition","parameters":{"id":7779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7776,"mutability":"mutable","name":"bits","nameLocation":"903:4:31","nodeType":"VariableDeclaration","scope":7780,"src":"897:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7775,"name":"uint8","nodeType":"ElementaryTypeName","src":"897:5:31","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7778,"mutability":"mutable","name":"value","nameLocation":"917:5:31","nodeType":"VariableDeclaration","scope":7780,"src":"909:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7777,"name":"uint256","nodeType":"ElementaryTypeName","src":"909:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"896:27:31"},"src":"860:64:31"},{"documentation":{"id":7781,"nodeType":"StructuredDocumentation","src":"930:75:31","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":7785,"name":"SafeCastOverflowedIntToUint","nameLocation":"1016:27:31","nodeType":"ErrorDefinition","parameters":{"id":7784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7783,"mutability":"mutable","name":"value","nameLocation":"1051:5:31","nodeType":"VariableDeclaration","scope":7785,"src":"1044:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7782,"name":"int256","nodeType":"ElementaryTypeName","src":"1044:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1043:14:31"},"src":"1010:48:31"},{"documentation":{"id":7786,"nodeType":"StructuredDocumentation","src":"1064:67:31","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":7792,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1142:29:31","nodeType":"ErrorDefinition","parameters":{"id":7791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7788,"mutability":"mutable","name":"bits","nameLocation":"1178:4:31","nodeType":"VariableDeclaration","scope":7792,"src":"1172:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7787,"name":"uint8","nodeType":"ElementaryTypeName","src":"1172:5:31","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7790,"mutability":"mutable","name":"value","nameLocation":"1191:5:31","nodeType":"VariableDeclaration","scope":7792,"src":"1184:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7789,"name":"int256","nodeType":"ElementaryTypeName","src":"1184:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1171:26:31"},"src":"1136:62:31"},{"documentation":{"id":7793,"nodeType":"StructuredDocumentation","src":"1204:75:31","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":7797,"name":"SafeCastOverflowedUintToInt","nameLocation":"1290:27:31","nodeType":"ErrorDefinition","parameters":{"id":7796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7795,"mutability":"mutable","name":"value","nameLocation":"1326:5:31","nodeType":"VariableDeclaration","scope":7797,"src":"1318:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7794,"name":"uint256","nodeType":"ElementaryTypeName","src":"1318:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1317:15:31"},"src":"1284:49:31"},{"body":{"id":7824,"nodeType":"Block","src":"1690:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7805,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7800,"src":"1704:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1717:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7807,"name":"uint248","nodeType":"ElementaryTypeName","src":"1717:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":7806,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1712:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1712:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":7810,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1726:3:31","memberName":"max","nodeType":"MemberAccess","src":"1712:17:31","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1704:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7818,"nodeType":"IfStatement","src":"1700:105:31","trueBody":{"id":7817,"nodeType":"Block","src":"1731:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":7813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1783:3:31","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":7814,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7800,"src":"1788:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7812,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"1752:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1752:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7816,"nodeType":"RevertStatement","src":"1745:49:31"}]}},{"expression":{"arguments":[{"id":7821,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7800,"src":"1829:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1821:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7819,"name":"uint248","nodeType":"ElementaryTypeName","src":"1821:7:31","typeDescriptions":{}}},"id":7822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":7804,"id":7823,"nodeType":"Return","src":"1814:21:31"}]},"documentation":{"id":7798,"nodeType":"StructuredDocumentation","src":"1339:280:31","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":7825,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1633:9:31","nodeType":"FunctionDefinition","parameters":{"id":7801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7800,"mutability":"mutable","name":"value","nameLocation":"1651:5:31","nodeType":"VariableDeclaration","scope":7825,"src":"1643:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7799,"name":"uint256","nodeType":"ElementaryTypeName","src":"1643:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1642:15:31"},"returnParameters":{"id":7804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7803,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7825,"src":"1681:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":7802,"name":"uint248","nodeType":"ElementaryTypeName","src":"1681:7:31","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1680:9:31"},"scope":9525,"src":"1624:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7852,"nodeType":"Block","src":"2199:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7833,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"2213:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2226:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7835,"name":"uint240","nodeType":"ElementaryTypeName","src":"2226:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":7834,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2221:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2221:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":7838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2235:3:31","memberName":"max","nodeType":"MemberAccess","src":"2221:17:31","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2213:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7846,"nodeType":"IfStatement","src":"2209:105:31","trueBody":{"id":7845,"nodeType":"Block","src":"2240:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":7841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:3:31","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":7842,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"2297:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7840,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"2261:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2261:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7844,"nodeType":"RevertStatement","src":"2254:49:31"}]}},{"expression":{"arguments":[{"id":7849,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7828,"src":"2338:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2330:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7847,"name":"uint240","nodeType":"ElementaryTypeName","src":"2330:7:31","typeDescriptions":{}}},"id":7850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2330:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":7832,"id":7851,"nodeType":"Return","src":"2323:21:31"}]},"documentation":{"id":7826,"nodeType":"StructuredDocumentation","src":"1848:280:31","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":7853,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2142:9:31","nodeType":"FunctionDefinition","parameters":{"id":7829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7828,"mutability":"mutable","name":"value","nameLocation":"2160:5:31","nodeType":"VariableDeclaration","scope":7853,"src":"2152:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7827,"name":"uint256","nodeType":"ElementaryTypeName","src":"2152:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2151:15:31"},"returnParameters":{"id":7832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7831,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7853,"src":"2190:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":7830,"name":"uint240","nodeType":"ElementaryTypeName","src":"2190:7:31","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2189:9:31"},"scope":9525,"src":"2133:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7880,"nodeType":"Block","src":"2708:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7861,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7856,"src":"2722:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7864,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2735:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7863,"name":"uint232","nodeType":"ElementaryTypeName","src":"2735:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":7862,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2730:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":7866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2744:3:31","memberName":"max","nodeType":"MemberAccess","src":"2730:17:31","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2722:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7874,"nodeType":"IfStatement","src":"2718:105:31","trueBody":{"id":7873,"nodeType":"Block","src":"2749:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":7869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:3:31","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":7870,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7856,"src":"2806:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7868,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"2770:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2770:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7872,"nodeType":"RevertStatement","src":"2763:49:31"}]}},{"expression":{"arguments":[{"id":7877,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7856,"src":"2847:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7876,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2839:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7875,"name":"uint232","nodeType":"ElementaryTypeName","src":"2839:7:31","typeDescriptions":{}}},"id":7878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":7860,"id":7879,"nodeType":"Return","src":"2832:21:31"}]},"documentation":{"id":7854,"nodeType":"StructuredDocumentation","src":"2357:280:31","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":7881,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2651:9:31","nodeType":"FunctionDefinition","parameters":{"id":7857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7856,"mutability":"mutable","name":"value","nameLocation":"2669:5:31","nodeType":"VariableDeclaration","scope":7881,"src":"2661:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7855,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2660:15:31"},"returnParameters":{"id":7860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7881,"src":"2699:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":7858,"name":"uint232","nodeType":"ElementaryTypeName","src":"2699:7:31","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2698:9:31"},"scope":9525,"src":"2642:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7908,"nodeType":"Block","src":"3217:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7889,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7884,"src":"3231:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3244:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7891,"name":"uint224","nodeType":"ElementaryTypeName","src":"3244:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":7890,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3239:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":7894,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3253:3:31","memberName":"max","nodeType":"MemberAccess","src":"3239:17:31","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3231:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7902,"nodeType":"IfStatement","src":"3227:105:31","trueBody":{"id":7901,"nodeType":"Block","src":"3258:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":7897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3310:3:31","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":7898,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7884,"src":"3315:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7896,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"3279:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3279:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7900,"nodeType":"RevertStatement","src":"3272:49:31"}]}},{"expression":{"arguments":[{"id":7905,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7884,"src":"3356:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7904,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3348:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7903,"name":"uint224","nodeType":"ElementaryTypeName","src":"3348:7:31","typeDescriptions":{}}},"id":7906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":7888,"id":7907,"nodeType":"Return","src":"3341:21:31"}]},"documentation":{"id":7882,"nodeType":"StructuredDocumentation","src":"2866:280:31","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":7909,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3160:9:31","nodeType":"FunctionDefinition","parameters":{"id":7885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7884,"mutability":"mutable","name":"value","nameLocation":"3178:5:31","nodeType":"VariableDeclaration","scope":7909,"src":"3170:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7883,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3169:15:31"},"returnParameters":{"id":7888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7887,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7909,"src":"3208:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":7886,"name":"uint224","nodeType":"ElementaryTypeName","src":"3208:7:31","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3207:9:31"},"scope":9525,"src":"3151:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7936,"nodeType":"Block","src":"3726:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7917,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7912,"src":"3740:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7920,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3753:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7919,"name":"uint216","nodeType":"ElementaryTypeName","src":"3753:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":7918,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3748:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":7922,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3762:3:31","memberName":"max","nodeType":"MemberAccess","src":"3748:17:31","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3740:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7930,"nodeType":"IfStatement","src":"3736:105:31","trueBody":{"id":7929,"nodeType":"Block","src":"3767:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":7925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3819:3:31","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":7926,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7912,"src":"3824:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7924,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"3788:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3788:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7928,"nodeType":"RevertStatement","src":"3781:49:31"}]}},{"expression":{"arguments":[{"id":7933,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7912,"src":"3865:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3857:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7931,"name":"uint216","nodeType":"ElementaryTypeName","src":"3857:7:31","typeDescriptions":{}}},"id":7934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3857:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":7916,"id":7935,"nodeType":"Return","src":"3850:21:31"}]},"documentation":{"id":7910,"nodeType":"StructuredDocumentation","src":"3375:280:31","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":7937,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3669:9:31","nodeType":"FunctionDefinition","parameters":{"id":7913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7912,"mutability":"mutable","name":"value","nameLocation":"3687:5:31","nodeType":"VariableDeclaration","scope":7937,"src":"3679:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7911,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3678:15:31"},"returnParameters":{"id":7916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7915,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7937,"src":"3717:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":7914,"name":"uint216","nodeType":"ElementaryTypeName","src":"3717:7:31","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3716:9:31"},"scope":9525,"src":"3660:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7964,"nodeType":"Block","src":"4235:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7945,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7940,"src":"4249:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7948,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4262:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7947,"name":"uint208","nodeType":"ElementaryTypeName","src":"4262:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":7946,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4257:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4257:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":7950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4271:3:31","memberName":"max","nodeType":"MemberAccess","src":"4257:17:31","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4249:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7958,"nodeType":"IfStatement","src":"4245:105:31","trueBody":{"id":7957,"nodeType":"Block","src":"4276:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":7953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4328:3:31","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":7954,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7940,"src":"4333:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7952,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"4297:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7956,"nodeType":"RevertStatement","src":"4290:49:31"}]}},{"expression":{"arguments":[{"id":7961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7940,"src":"4374:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4366:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7959,"name":"uint208","nodeType":"ElementaryTypeName","src":"4366:7:31","typeDescriptions":{}}},"id":7962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":7944,"id":7963,"nodeType":"Return","src":"4359:21:31"}]},"documentation":{"id":7938,"nodeType":"StructuredDocumentation","src":"3884:280:31","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":7965,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4178:9:31","nodeType":"FunctionDefinition","parameters":{"id":7941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7940,"mutability":"mutable","name":"value","nameLocation":"4196:5:31","nodeType":"VariableDeclaration","scope":7965,"src":"4188:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7939,"name":"uint256","nodeType":"ElementaryTypeName","src":"4188:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4187:15:31"},"returnParameters":{"id":7944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7965,"src":"4226:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":7942,"name":"uint208","nodeType":"ElementaryTypeName","src":"4226:7:31","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4225:9:31"},"scope":9525,"src":"4169:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7992,"nodeType":"Block","src":"4744:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7973,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7968,"src":"4758:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4771:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7975,"name":"uint200","nodeType":"ElementaryTypeName","src":"4771:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":7974,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4766:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4766:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":7978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4780:3:31","memberName":"max","nodeType":"MemberAccess","src":"4766:17:31","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4758:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7986,"nodeType":"IfStatement","src":"4754:105:31","trueBody":{"id":7985,"nodeType":"Block","src":"4785:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":7981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:3:31","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":7982,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7968,"src":"4842:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7980,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"4806:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7984,"nodeType":"RevertStatement","src":"4799:49:31"}]}},{"expression":{"arguments":[{"id":7989,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7968,"src":"4883:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7988,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4875:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7987,"name":"uint200","nodeType":"ElementaryTypeName","src":"4875:7:31","typeDescriptions":{}}},"id":7990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":7972,"id":7991,"nodeType":"Return","src":"4868:21:31"}]},"documentation":{"id":7966,"nodeType":"StructuredDocumentation","src":"4393:280:31","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":7993,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4687:9:31","nodeType":"FunctionDefinition","parameters":{"id":7969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7968,"mutability":"mutable","name":"value","nameLocation":"4705:5:31","nodeType":"VariableDeclaration","scope":7993,"src":"4697:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7967,"name":"uint256","nodeType":"ElementaryTypeName","src":"4697:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4696:15:31"},"returnParameters":{"id":7972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7993,"src":"4735:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":7970,"name":"uint200","nodeType":"ElementaryTypeName","src":"4735:7:31","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4734:9:31"},"scope":9525,"src":"4678:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8020,"nodeType":"Block","src":"5253:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8001,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7996,"src":"5267:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5280:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":8003,"name":"uint192","nodeType":"ElementaryTypeName","src":"5280:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":8002,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5275:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5275:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":8006,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5289:3:31","memberName":"max","nodeType":"MemberAccess","src":"5275:17:31","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5267:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8014,"nodeType":"IfStatement","src":"5263:105:31","trueBody":{"id":8013,"nodeType":"Block","src":"5294:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":8009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5346:3:31","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":8010,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7996,"src":"5351:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8008,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"5315:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8012,"nodeType":"RevertStatement","src":"5308:49:31"}]}},{"expression":{"arguments":[{"id":8017,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7996,"src":"5392:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5384:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":8015,"name":"uint192","nodeType":"ElementaryTypeName","src":"5384:7:31","typeDescriptions":{}}},"id":8018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5384:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":8000,"id":8019,"nodeType":"Return","src":"5377:21:31"}]},"documentation":{"id":7994,"nodeType":"StructuredDocumentation","src":"4902:280:31","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":8021,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5196:9:31","nodeType":"FunctionDefinition","parameters":{"id":7997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7996,"mutability":"mutable","name":"value","nameLocation":"5214:5:31","nodeType":"VariableDeclaration","scope":8021,"src":"5206:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7995,"name":"uint256","nodeType":"ElementaryTypeName","src":"5206:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5205:15:31"},"returnParameters":{"id":8000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7999,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8021,"src":"5244:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":7998,"name":"uint192","nodeType":"ElementaryTypeName","src":"5244:7:31","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5243:9:31"},"scope":9525,"src":"5187:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8048,"nodeType":"Block","src":"5762:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8029,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8024,"src":"5776:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5789:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":8031,"name":"uint184","nodeType":"ElementaryTypeName","src":"5789:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":8030,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5784:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":8034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5798:3:31","memberName":"max","nodeType":"MemberAccess","src":"5784:17:31","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5776:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8042,"nodeType":"IfStatement","src":"5772:105:31","trueBody":{"id":8041,"nodeType":"Block","src":"5803:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":8037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5855:3:31","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":8038,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8024,"src":"5860:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8036,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"5824:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5824:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8040,"nodeType":"RevertStatement","src":"5817:49:31"}]}},{"expression":{"arguments":[{"id":8045,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8024,"src":"5901:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5893:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":8043,"name":"uint184","nodeType":"ElementaryTypeName","src":"5893:7:31","typeDescriptions":{}}},"id":8046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5893:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":8028,"id":8047,"nodeType":"Return","src":"5886:21:31"}]},"documentation":{"id":8022,"nodeType":"StructuredDocumentation","src":"5411:280:31","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":8049,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5705:9:31","nodeType":"FunctionDefinition","parameters":{"id":8025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8024,"mutability":"mutable","name":"value","nameLocation":"5723:5:31","nodeType":"VariableDeclaration","scope":8049,"src":"5715:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8023,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5714:15:31"},"returnParameters":{"id":8028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8027,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8049,"src":"5753:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":8026,"name":"uint184","nodeType":"ElementaryTypeName","src":"5753:7:31","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5752:9:31"},"scope":9525,"src":"5696:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8076,"nodeType":"Block","src":"6271:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8057,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8052,"src":"6285:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8060,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6298:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":8059,"name":"uint176","nodeType":"ElementaryTypeName","src":"6298:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":8058,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6293:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6293:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":8062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6307:3:31","memberName":"max","nodeType":"MemberAccess","src":"6293:17:31","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6285:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8070,"nodeType":"IfStatement","src":"6281:105:31","trueBody":{"id":8069,"nodeType":"Block","src":"6312:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":8065,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6364:3:31","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":8066,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8052,"src":"6369:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8064,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"6333:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6333:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8068,"nodeType":"RevertStatement","src":"6326:49:31"}]}},{"expression":{"arguments":[{"id":8073,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8052,"src":"6410:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6402:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":8071,"name":"uint176","nodeType":"ElementaryTypeName","src":"6402:7:31","typeDescriptions":{}}},"id":8074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":8056,"id":8075,"nodeType":"Return","src":"6395:21:31"}]},"documentation":{"id":8050,"nodeType":"StructuredDocumentation","src":"5920:280:31","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":8077,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6214:9:31","nodeType":"FunctionDefinition","parameters":{"id":8053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8052,"mutability":"mutable","name":"value","nameLocation":"6232:5:31","nodeType":"VariableDeclaration","scope":8077,"src":"6224:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8051,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6223:15:31"},"returnParameters":{"id":8056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8077,"src":"6262:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":8054,"name":"uint176","nodeType":"ElementaryTypeName","src":"6262:7:31","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6261:9:31"},"scope":9525,"src":"6205:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8104,"nodeType":"Block","src":"6780:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8085,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8080,"src":"6794:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6807:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":8087,"name":"uint168","nodeType":"ElementaryTypeName","src":"6807:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":8086,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6802:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6802:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":8090,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6816:3:31","memberName":"max","nodeType":"MemberAccess","src":"6802:17:31","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6794:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8098,"nodeType":"IfStatement","src":"6790:105:31","trueBody":{"id":8097,"nodeType":"Block","src":"6821:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":8093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6873:3:31","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":8094,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8080,"src":"6878:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8092,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"6842:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6842:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8096,"nodeType":"RevertStatement","src":"6835:49:31"}]}},{"expression":{"arguments":[{"id":8101,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8080,"src":"6919:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6911:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":8099,"name":"uint168","nodeType":"ElementaryTypeName","src":"6911:7:31","typeDescriptions":{}}},"id":8102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":8084,"id":8103,"nodeType":"Return","src":"6904:21:31"}]},"documentation":{"id":8078,"nodeType":"StructuredDocumentation","src":"6429:280:31","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":8105,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6723:9:31","nodeType":"FunctionDefinition","parameters":{"id":8081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8080,"mutability":"mutable","name":"value","nameLocation":"6741:5:31","nodeType":"VariableDeclaration","scope":8105,"src":"6733:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8079,"name":"uint256","nodeType":"ElementaryTypeName","src":"6733:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6732:15:31"},"returnParameters":{"id":8084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8083,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8105,"src":"6771:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":8082,"name":"uint168","nodeType":"ElementaryTypeName","src":"6771:7:31","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6770:9:31"},"scope":9525,"src":"6714:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8132,"nodeType":"Block","src":"7289:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8113,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8108,"src":"7303:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7316:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":8115,"name":"uint160","nodeType":"ElementaryTypeName","src":"7316:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":8114,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7311:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7311:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":8118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7325:3:31","memberName":"max","nodeType":"MemberAccess","src":"7311:17:31","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7303:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8126,"nodeType":"IfStatement","src":"7299:105:31","trueBody":{"id":8125,"nodeType":"Block","src":"7330:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":8121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7382:3:31","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":8122,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8108,"src":"7387:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8120,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"7351:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7351:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8124,"nodeType":"RevertStatement","src":"7344:49:31"}]}},{"expression":{"arguments":[{"id":8129,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8108,"src":"7428:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8128,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7420:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":8127,"name":"uint160","nodeType":"ElementaryTypeName","src":"7420:7:31","typeDescriptions":{}}},"id":8130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7420:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":8112,"id":8131,"nodeType":"Return","src":"7413:21:31"}]},"documentation":{"id":8106,"nodeType":"StructuredDocumentation","src":"6938:280:31","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":8133,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7232:9:31","nodeType":"FunctionDefinition","parameters":{"id":8109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8108,"mutability":"mutable","name":"value","nameLocation":"7250:5:31","nodeType":"VariableDeclaration","scope":8133,"src":"7242:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8107,"name":"uint256","nodeType":"ElementaryTypeName","src":"7242:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7241:15:31"},"returnParameters":{"id":8112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8111,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8133,"src":"7280:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":8110,"name":"uint160","nodeType":"ElementaryTypeName","src":"7280:7:31","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7279:9:31"},"scope":9525,"src":"7223:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8160,"nodeType":"Block","src":"7798:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8141,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8136,"src":"7812:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8144,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7825:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":8143,"name":"uint152","nodeType":"ElementaryTypeName","src":"7825:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":8142,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7820:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8145,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7820:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":8146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7834:3:31","memberName":"max","nodeType":"MemberAccess","src":"7820:17:31","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7812:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8154,"nodeType":"IfStatement","src":"7808:105:31","trueBody":{"id":8153,"nodeType":"Block","src":"7839:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":8149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7891:3:31","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":8150,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8136,"src":"7896:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8148,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"7860:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7860:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8152,"nodeType":"RevertStatement","src":"7853:49:31"}]}},{"expression":{"arguments":[{"id":8157,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8136,"src":"7937:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8156,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7929:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":8155,"name":"uint152","nodeType":"ElementaryTypeName","src":"7929:7:31","typeDescriptions":{}}},"id":8158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7929:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":8140,"id":8159,"nodeType":"Return","src":"7922:21:31"}]},"documentation":{"id":8134,"nodeType":"StructuredDocumentation","src":"7447:280:31","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":8161,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7741:9:31","nodeType":"FunctionDefinition","parameters":{"id":8137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8136,"mutability":"mutable","name":"value","nameLocation":"7759:5:31","nodeType":"VariableDeclaration","scope":8161,"src":"7751:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8135,"name":"uint256","nodeType":"ElementaryTypeName","src":"7751:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7750:15:31"},"returnParameters":{"id":8140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8139,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8161,"src":"7789:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":8138,"name":"uint152","nodeType":"ElementaryTypeName","src":"7789:7:31","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7788:9:31"},"scope":9525,"src":"7732:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8188,"nodeType":"Block","src":"8307:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8169,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8164,"src":"8321:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8334:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":8171,"name":"uint144","nodeType":"ElementaryTypeName","src":"8334:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":8170,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8329:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8173,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8329:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":8174,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8343:3:31","memberName":"max","nodeType":"MemberAccess","src":"8329:17:31","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8321:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8182,"nodeType":"IfStatement","src":"8317:105:31","trueBody":{"id":8181,"nodeType":"Block","src":"8348:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":8177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8400:3:31","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":8178,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8164,"src":"8405:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8176,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"8369:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8369:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8180,"nodeType":"RevertStatement","src":"8362:49:31"}]}},{"expression":{"arguments":[{"id":8185,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8164,"src":"8446:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8438:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":8183,"name":"uint144","nodeType":"ElementaryTypeName","src":"8438:7:31","typeDescriptions":{}}},"id":8186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8438:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":8168,"id":8187,"nodeType":"Return","src":"8431:21:31"}]},"documentation":{"id":8162,"nodeType":"StructuredDocumentation","src":"7956:280:31","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":8189,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8250:9:31","nodeType":"FunctionDefinition","parameters":{"id":8165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8164,"mutability":"mutable","name":"value","nameLocation":"8268:5:31","nodeType":"VariableDeclaration","scope":8189,"src":"8260:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8163,"name":"uint256","nodeType":"ElementaryTypeName","src":"8260:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8259:15:31"},"returnParameters":{"id":8168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8167,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8189,"src":"8298:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":8166,"name":"uint144","nodeType":"ElementaryTypeName","src":"8298:7:31","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8297:9:31"},"scope":9525,"src":"8241:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8216,"nodeType":"Block","src":"8816:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8197,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8192,"src":"8830:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8843:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":8199,"name":"uint136","nodeType":"ElementaryTypeName","src":"8843:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":8198,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8838:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":8202,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8852:3:31","memberName":"max","nodeType":"MemberAccess","src":"8838:17:31","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8830:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8210,"nodeType":"IfStatement","src":"8826:105:31","trueBody":{"id":8209,"nodeType":"Block","src":"8857:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":8205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8909:3:31","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":8206,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8192,"src":"8914:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8204,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"8878:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8878:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8208,"nodeType":"RevertStatement","src":"8871:49:31"}]}},{"expression":{"arguments":[{"id":8213,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8192,"src":"8955:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8947:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":8211,"name":"uint136","nodeType":"ElementaryTypeName","src":"8947:7:31","typeDescriptions":{}}},"id":8214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8947:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":8196,"id":8215,"nodeType":"Return","src":"8940:21:31"}]},"documentation":{"id":8190,"nodeType":"StructuredDocumentation","src":"8465:280:31","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":8217,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8759:9:31","nodeType":"FunctionDefinition","parameters":{"id":8193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8192,"mutability":"mutable","name":"value","nameLocation":"8777:5:31","nodeType":"VariableDeclaration","scope":8217,"src":"8769:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8191,"name":"uint256","nodeType":"ElementaryTypeName","src":"8769:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8768:15:31"},"returnParameters":{"id":8196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8217,"src":"8807:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":8194,"name":"uint136","nodeType":"ElementaryTypeName","src":"8807:7:31","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8806:9:31"},"scope":9525,"src":"8750:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8244,"nodeType":"Block","src":"9325:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8225,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"9339:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8228,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9352:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":8227,"name":"uint128","nodeType":"ElementaryTypeName","src":"9352:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":8226,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9347:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9347:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":8230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9361:3:31","memberName":"max","nodeType":"MemberAccess","src":"9347:17:31","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9339:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8238,"nodeType":"IfStatement","src":"9335:105:31","trueBody":{"id":8237,"nodeType":"Block","src":"9366:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":8233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9418:3:31","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":8234,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"9423:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8232,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"9387:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8236,"nodeType":"RevertStatement","src":"9380:49:31"}]}},{"expression":{"arguments":[{"id":8241,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"9464:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8240,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9456:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":8239,"name":"uint128","nodeType":"ElementaryTypeName","src":"9456:7:31","typeDescriptions":{}}},"id":8242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":8224,"id":8243,"nodeType":"Return","src":"9449:21:31"}]},"documentation":{"id":8218,"nodeType":"StructuredDocumentation","src":"8974:280:31","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":8245,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9268:9:31","nodeType":"FunctionDefinition","parameters":{"id":8221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8220,"mutability":"mutable","name":"value","nameLocation":"9286:5:31","nodeType":"VariableDeclaration","scope":8245,"src":"9278:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8219,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9277:15:31"},"returnParameters":{"id":8224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8245,"src":"9316:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":8222,"name":"uint128","nodeType":"ElementaryTypeName","src":"9316:7:31","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9315:9:31"},"scope":9525,"src":"9259:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8272,"nodeType":"Block","src":"9834:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8253,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8248,"src":"9848:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9861:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":8255,"name":"uint120","nodeType":"ElementaryTypeName","src":"9861:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":8254,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9856:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8257,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9856:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":8258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9870:3:31","memberName":"max","nodeType":"MemberAccess","src":"9856:17:31","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9848:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8266,"nodeType":"IfStatement","src":"9844:105:31","trueBody":{"id":8265,"nodeType":"Block","src":"9875:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":8261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:3:31","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":8262,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8248,"src":"9932:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8260,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"9896:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9896:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8264,"nodeType":"RevertStatement","src":"9889:49:31"}]}},{"expression":{"arguments":[{"id":8269,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8248,"src":"9973:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9965:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":8267,"name":"uint120","nodeType":"ElementaryTypeName","src":"9965:7:31","typeDescriptions":{}}},"id":8270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9965:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":8252,"id":8271,"nodeType":"Return","src":"9958:21:31"}]},"documentation":{"id":8246,"nodeType":"StructuredDocumentation","src":"9483:280:31","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":8273,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9777:9:31","nodeType":"FunctionDefinition","parameters":{"id":8249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8248,"mutability":"mutable","name":"value","nameLocation":"9795:5:31","nodeType":"VariableDeclaration","scope":8273,"src":"9787:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8247,"name":"uint256","nodeType":"ElementaryTypeName","src":"9787:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9786:15:31"},"returnParameters":{"id":8252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8251,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8273,"src":"9825:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":8250,"name":"uint120","nodeType":"ElementaryTypeName","src":"9825:7:31","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9824:9:31"},"scope":9525,"src":"9768:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8300,"nodeType":"Block","src":"10343:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8281,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8276,"src":"10357:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10370:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":8283,"name":"uint112","nodeType":"ElementaryTypeName","src":"10370:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":8282,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10365:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":8286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10379:3:31","memberName":"max","nodeType":"MemberAccess","src":"10365:17:31","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10357:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8294,"nodeType":"IfStatement","src":"10353:105:31","trueBody":{"id":8293,"nodeType":"Block","src":"10384:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":8289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10436:3:31","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":8290,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8276,"src":"10441:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8288,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"10405:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10405:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8292,"nodeType":"RevertStatement","src":"10398:49:31"}]}},{"expression":{"arguments":[{"id":8297,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8276,"src":"10482:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10474:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":8295,"name":"uint112","nodeType":"ElementaryTypeName","src":"10474:7:31","typeDescriptions":{}}},"id":8298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10474:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":8280,"id":8299,"nodeType":"Return","src":"10467:21:31"}]},"documentation":{"id":8274,"nodeType":"StructuredDocumentation","src":"9992:280:31","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":8301,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10286:9:31","nodeType":"FunctionDefinition","parameters":{"id":8277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8276,"mutability":"mutable","name":"value","nameLocation":"10304:5:31","nodeType":"VariableDeclaration","scope":8301,"src":"10296:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8275,"name":"uint256","nodeType":"ElementaryTypeName","src":"10296:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10295:15:31"},"returnParameters":{"id":8280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8279,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8301,"src":"10334:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":8278,"name":"uint112","nodeType":"ElementaryTypeName","src":"10334:7:31","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10333:9:31"},"scope":9525,"src":"10277:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8328,"nodeType":"Block","src":"10852:152:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8309,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8304,"src":"10866:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10879:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":8311,"name":"uint104","nodeType":"ElementaryTypeName","src":"10879:7:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":8310,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10874:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10874:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":8314,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10888:3:31","memberName":"max","nodeType":"MemberAccess","src":"10874:17:31","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10866:25:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8322,"nodeType":"IfStatement","src":"10862:105:31","trueBody":{"id":8321,"nodeType":"Block","src":"10893:74:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":8317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10945:3:31","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":8318,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8304,"src":"10950:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8316,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"10914:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:42:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8320,"nodeType":"RevertStatement","src":"10907:49:31"}]}},{"expression":{"arguments":[{"id":8325,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8304,"src":"10991:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8324,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10983:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":8323,"name":"uint104","nodeType":"ElementaryTypeName","src":"10983:7:31","typeDescriptions":{}}},"id":8326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10983:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":8308,"id":8327,"nodeType":"Return","src":"10976:21:31"}]},"documentation":{"id":8302,"nodeType":"StructuredDocumentation","src":"10501:280:31","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":8329,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10795:9:31","nodeType":"FunctionDefinition","parameters":{"id":8305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8304,"mutability":"mutable","name":"value","nameLocation":"10813:5:31","nodeType":"VariableDeclaration","scope":8329,"src":"10805:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8303,"name":"uint256","nodeType":"ElementaryTypeName","src":"10805:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10804:15:31"},"returnParameters":{"id":8308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8329,"src":"10843:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":8306,"name":"uint104","nodeType":"ElementaryTypeName","src":"10843:7:31","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10842:9:31"},"scope":9525,"src":"10786:218:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8356,"nodeType":"Block","src":"11355:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8337,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"11369:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8340,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11382:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":8339,"name":"uint96","nodeType":"ElementaryTypeName","src":"11382:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":8338,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11377:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11377:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":8342,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11390:3:31","memberName":"max","nodeType":"MemberAccess","src":"11377:16:31","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11369:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8350,"nodeType":"IfStatement","src":"11365:103:31","trueBody":{"id":8349,"nodeType":"Block","src":"11395:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":8345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11447:2:31","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":8346,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"11451:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8344,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"11416:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11416:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8348,"nodeType":"RevertStatement","src":"11409:48:31"}]}},{"expression":{"arguments":[{"id":8353,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8332,"src":"11491:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11484:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":8351,"name":"uint96","nodeType":"ElementaryTypeName","src":"11484:6:31","typeDescriptions":{}}},"id":8354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11484:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":8336,"id":8355,"nodeType":"Return","src":"11477:20:31"}]},"documentation":{"id":8330,"nodeType":"StructuredDocumentation","src":"11010:276:31","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":8357,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11300:8:31","nodeType":"FunctionDefinition","parameters":{"id":8333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8332,"mutability":"mutable","name":"value","nameLocation":"11317:5:31","nodeType":"VariableDeclaration","scope":8357,"src":"11309:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8331,"name":"uint256","nodeType":"ElementaryTypeName","src":"11309:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11308:15:31"},"returnParameters":{"id":8336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8357,"src":"11347:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":8334,"name":"uint96","nodeType":"ElementaryTypeName","src":"11347:6:31","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11346:8:31"},"scope":9525,"src":"11291:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8384,"nodeType":"Block","src":"11855:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8365,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8360,"src":"11869:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11882:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":8367,"name":"uint88","nodeType":"ElementaryTypeName","src":"11882:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":8366,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11877:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11877:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":8370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11890:3:31","memberName":"max","nodeType":"MemberAccess","src":"11877:16:31","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11869:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8378,"nodeType":"IfStatement","src":"11865:103:31","trueBody":{"id":8377,"nodeType":"Block","src":"11895:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":8373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11947:2:31","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":8374,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8360,"src":"11951:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8372,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"11916:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11916:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8376,"nodeType":"RevertStatement","src":"11909:48:31"}]}},{"expression":{"arguments":[{"id":8381,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8360,"src":"11991:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11984:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":8379,"name":"uint88","nodeType":"ElementaryTypeName","src":"11984:6:31","typeDescriptions":{}}},"id":8382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11984:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":8364,"id":8383,"nodeType":"Return","src":"11977:20:31"}]},"documentation":{"id":8358,"nodeType":"StructuredDocumentation","src":"11510:276:31","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":8385,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11800:8:31","nodeType":"FunctionDefinition","parameters":{"id":8361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8360,"mutability":"mutable","name":"value","nameLocation":"11817:5:31","nodeType":"VariableDeclaration","scope":8385,"src":"11809:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8359,"name":"uint256","nodeType":"ElementaryTypeName","src":"11809:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11808:15:31"},"returnParameters":{"id":8364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8363,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8385,"src":"11847:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":8362,"name":"uint88","nodeType":"ElementaryTypeName","src":"11847:6:31","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11846:8:31"},"scope":9525,"src":"11791:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8412,"nodeType":"Block","src":"12355:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8393,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8388,"src":"12369:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12382:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":8395,"name":"uint80","nodeType":"ElementaryTypeName","src":"12382:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":8394,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12377:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12377:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":8398,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12390:3:31","memberName":"max","nodeType":"MemberAccess","src":"12377:16:31","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12369:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8406,"nodeType":"IfStatement","src":"12365:103:31","trueBody":{"id":8405,"nodeType":"Block","src":"12395:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":8401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12447:2:31","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":8402,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8388,"src":"12451:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8400,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"12416:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12416:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8404,"nodeType":"RevertStatement","src":"12409:48:31"}]}},{"expression":{"arguments":[{"id":8409,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8388,"src":"12491:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12484:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":8407,"name":"uint80","nodeType":"ElementaryTypeName","src":"12484:6:31","typeDescriptions":{}}},"id":8410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12484:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":8392,"id":8411,"nodeType":"Return","src":"12477:20:31"}]},"documentation":{"id":8386,"nodeType":"StructuredDocumentation","src":"12010:276:31","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":8413,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12300:8:31","nodeType":"FunctionDefinition","parameters":{"id":8389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8388,"mutability":"mutable","name":"value","nameLocation":"12317:5:31","nodeType":"VariableDeclaration","scope":8413,"src":"12309:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8387,"name":"uint256","nodeType":"ElementaryTypeName","src":"12309:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12308:15:31"},"returnParameters":{"id":8392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8413,"src":"12347:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":8390,"name":"uint80","nodeType":"ElementaryTypeName","src":"12347:6:31","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12346:8:31"},"scope":9525,"src":"12291:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8440,"nodeType":"Block","src":"12855:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8421,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8416,"src":"12869:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8424,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12882:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":8423,"name":"uint72","nodeType":"ElementaryTypeName","src":"12882:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":8422,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12877:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12877:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":8426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12890:3:31","memberName":"max","nodeType":"MemberAccess","src":"12877:16:31","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12869:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8434,"nodeType":"IfStatement","src":"12865:103:31","trueBody":{"id":8433,"nodeType":"Block","src":"12895:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":8429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12947:2:31","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":8430,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8416,"src":"12951:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8428,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"12916:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12916:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8432,"nodeType":"RevertStatement","src":"12909:48:31"}]}},{"expression":{"arguments":[{"id":8437,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8416,"src":"12991:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8436,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12984:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":8435,"name":"uint72","nodeType":"ElementaryTypeName","src":"12984:6:31","typeDescriptions":{}}},"id":8438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12984:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":8420,"id":8439,"nodeType":"Return","src":"12977:20:31"}]},"documentation":{"id":8414,"nodeType":"StructuredDocumentation","src":"12510:276:31","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":8441,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12800:8:31","nodeType":"FunctionDefinition","parameters":{"id":8417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8416,"mutability":"mutable","name":"value","nameLocation":"12817:5:31","nodeType":"VariableDeclaration","scope":8441,"src":"12809:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8415,"name":"uint256","nodeType":"ElementaryTypeName","src":"12809:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12808:15:31"},"returnParameters":{"id":8420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8441,"src":"12847:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":8418,"name":"uint72","nodeType":"ElementaryTypeName","src":"12847:6:31","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12846:8:31"},"scope":9525,"src":"12791:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8468,"nodeType":"Block","src":"13355:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8449,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8444,"src":"13369:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8452,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13382:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":8451,"name":"uint64","nodeType":"ElementaryTypeName","src":"13382:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":8450,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13377:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13377:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":8454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13390:3:31","memberName":"max","nodeType":"MemberAccess","src":"13377:16:31","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13369:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8462,"nodeType":"IfStatement","src":"13365:103:31","trueBody":{"id":8461,"nodeType":"Block","src":"13395:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":8457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13447:2:31","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":8458,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8444,"src":"13451:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8456,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"13416:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8460,"nodeType":"RevertStatement","src":"13409:48:31"}]}},{"expression":{"arguments":[{"id":8465,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8444,"src":"13491:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13484:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":8463,"name":"uint64","nodeType":"ElementaryTypeName","src":"13484:6:31","typeDescriptions":{}}},"id":8466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13484:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":8448,"id":8467,"nodeType":"Return","src":"13477:20:31"}]},"documentation":{"id":8442,"nodeType":"StructuredDocumentation","src":"13010:276:31","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":8469,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13300:8:31","nodeType":"FunctionDefinition","parameters":{"id":8445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8444,"mutability":"mutable","name":"value","nameLocation":"13317:5:31","nodeType":"VariableDeclaration","scope":8469,"src":"13309:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8443,"name":"uint256","nodeType":"ElementaryTypeName","src":"13309:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13308:15:31"},"returnParameters":{"id":8448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8447,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8469,"src":"13347:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":8446,"name":"uint64","nodeType":"ElementaryTypeName","src":"13347:6:31","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13346:8:31"},"scope":9525,"src":"13291:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8496,"nodeType":"Block","src":"13855:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8477,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8472,"src":"13869:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13882:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":8479,"name":"uint56","nodeType":"ElementaryTypeName","src":"13882:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":8478,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13877:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13877:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":8482,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13890:3:31","memberName":"max","nodeType":"MemberAccess","src":"13877:16:31","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13869:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8490,"nodeType":"IfStatement","src":"13865:103:31","trueBody":{"id":8489,"nodeType":"Block","src":"13895:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":8485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13947:2:31","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":8486,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8472,"src":"13951:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8484,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"13916:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13916:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8488,"nodeType":"RevertStatement","src":"13909:48:31"}]}},{"expression":{"arguments":[{"id":8493,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8472,"src":"13991:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8492,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13984:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":8491,"name":"uint56","nodeType":"ElementaryTypeName","src":"13984:6:31","typeDescriptions":{}}},"id":8494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13984:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":8476,"id":8495,"nodeType":"Return","src":"13977:20:31"}]},"documentation":{"id":8470,"nodeType":"StructuredDocumentation","src":"13510:276:31","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":8497,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13800:8:31","nodeType":"FunctionDefinition","parameters":{"id":8473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8472,"mutability":"mutable","name":"value","nameLocation":"13817:5:31","nodeType":"VariableDeclaration","scope":8497,"src":"13809:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8471,"name":"uint256","nodeType":"ElementaryTypeName","src":"13809:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13808:15:31"},"returnParameters":{"id":8476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8475,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8497,"src":"13847:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":8474,"name":"uint56","nodeType":"ElementaryTypeName","src":"13847:6:31","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13846:8:31"},"scope":9525,"src":"13791:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8524,"nodeType":"Block","src":"14355:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8505,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8500,"src":"14369:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14382:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":8507,"name":"uint48","nodeType":"ElementaryTypeName","src":"14382:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":8506,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14377:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14377:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":8510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14390:3:31","memberName":"max","nodeType":"MemberAccess","src":"14377:16:31","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14369:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8518,"nodeType":"IfStatement","src":"14365:103:31","trueBody":{"id":8517,"nodeType":"Block","src":"14395:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":8513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14447:2:31","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":8514,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8500,"src":"14451:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8512,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"14416:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14416:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8516,"nodeType":"RevertStatement","src":"14409:48:31"}]}},{"expression":{"arguments":[{"id":8521,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8500,"src":"14491:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14484:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":8519,"name":"uint48","nodeType":"ElementaryTypeName","src":"14484:6:31","typeDescriptions":{}}},"id":8522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14484:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":8504,"id":8523,"nodeType":"Return","src":"14477:20:31"}]},"documentation":{"id":8498,"nodeType":"StructuredDocumentation","src":"14010:276:31","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":8525,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14300:8:31","nodeType":"FunctionDefinition","parameters":{"id":8501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8500,"mutability":"mutable","name":"value","nameLocation":"14317:5:31","nodeType":"VariableDeclaration","scope":8525,"src":"14309:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8499,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14308:15:31"},"returnParameters":{"id":8504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8525,"src":"14347:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":8502,"name":"uint48","nodeType":"ElementaryTypeName","src":"14347:6:31","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14346:8:31"},"scope":9525,"src":"14291:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8552,"nodeType":"Block","src":"14855:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8533,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8528,"src":"14869:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14882:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":8535,"name":"uint40","nodeType":"ElementaryTypeName","src":"14882:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":8534,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14877:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14877:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":8538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14890:3:31","memberName":"max","nodeType":"MemberAccess","src":"14877:16:31","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14869:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8546,"nodeType":"IfStatement","src":"14865:103:31","trueBody":{"id":8545,"nodeType":"Block","src":"14895:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":8541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14947:2:31","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":8542,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8528,"src":"14951:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8540,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"14916:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14916:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8544,"nodeType":"RevertStatement","src":"14909:48:31"}]}},{"expression":{"arguments":[{"id":8549,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8528,"src":"14991:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8548,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14984:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":8547,"name":"uint40","nodeType":"ElementaryTypeName","src":"14984:6:31","typeDescriptions":{}}},"id":8550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14984:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":8532,"id":8551,"nodeType":"Return","src":"14977:20:31"}]},"documentation":{"id":8526,"nodeType":"StructuredDocumentation","src":"14510:276:31","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":8553,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14800:8:31","nodeType":"FunctionDefinition","parameters":{"id":8529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8528,"mutability":"mutable","name":"value","nameLocation":"14817:5:31","nodeType":"VariableDeclaration","scope":8553,"src":"14809:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8527,"name":"uint256","nodeType":"ElementaryTypeName","src":"14809:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14808:15:31"},"returnParameters":{"id":8532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8553,"src":"14847:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":8530,"name":"uint40","nodeType":"ElementaryTypeName","src":"14847:6:31","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14846:8:31"},"scope":9525,"src":"14791:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8580,"nodeType":"Block","src":"15355:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8561,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8556,"src":"15369:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8564,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15382:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":8563,"name":"uint32","nodeType":"ElementaryTypeName","src":"15382:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":8562,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15377:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15377:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":8566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15390:3:31","memberName":"max","nodeType":"MemberAccess","src":"15377:16:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15369:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8574,"nodeType":"IfStatement","src":"15365:103:31","trueBody":{"id":8573,"nodeType":"Block","src":"15395:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":8569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15447:2:31","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":8570,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8556,"src":"15451:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8568,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"15416:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15416:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8572,"nodeType":"RevertStatement","src":"15409:48:31"}]}},{"expression":{"arguments":[{"id":8577,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8556,"src":"15491:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15484:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":8575,"name":"uint32","nodeType":"ElementaryTypeName","src":"15484:6:31","typeDescriptions":{}}},"id":8578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15484:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":8560,"id":8579,"nodeType":"Return","src":"15477:20:31"}]},"documentation":{"id":8554,"nodeType":"StructuredDocumentation","src":"15010:276:31","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":8581,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15300:8:31","nodeType":"FunctionDefinition","parameters":{"id":8557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8556,"mutability":"mutable","name":"value","nameLocation":"15317:5:31","nodeType":"VariableDeclaration","scope":8581,"src":"15309:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8555,"name":"uint256","nodeType":"ElementaryTypeName","src":"15309:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15308:15:31"},"returnParameters":{"id":8560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8581,"src":"15347:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":8558,"name":"uint32","nodeType":"ElementaryTypeName","src":"15347:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15346:8:31"},"scope":9525,"src":"15291:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8608,"nodeType":"Block","src":"15855:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8589,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"15869:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15882:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":8591,"name":"uint24","nodeType":"ElementaryTypeName","src":"15882:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":8590,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15877:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15877:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":8594,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15890:3:31","memberName":"max","nodeType":"MemberAccess","src":"15877:16:31","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15869:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8602,"nodeType":"IfStatement","src":"15865:103:31","trueBody":{"id":8601,"nodeType":"Block","src":"15895:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":8597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15947:2:31","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":8598,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"15951:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8596,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"15916:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15916:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8600,"nodeType":"RevertStatement","src":"15909:48:31"}]}},{"expression":{"arguments":[{"id":8605,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"15991:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15984:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":8603,"name":"uint24","nodeType":"ElementaryTypeName","src":"15984:6:31","typeDescriptions":{}}},"id":8606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15984:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":8588,"id":8607,"nodeType":"Return","src":"15977:20:31"}]},"documentation":{"id":8582,"nodeType":"StructuredDocumentation","src":"15510:276:31","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":8609,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15800:8:31","nodeType":"FunctionDefinition","parameters":{"id":8585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8584,"mutability":"mutable","name":"value","nameLocation":"15817:5:31","nodeType":"VariableDeclaration","scope":8609,"src":"15809:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8583,"name":"uint256","nodeType":"ElementaryTypeName","src":"15809:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15808:15:31"},"returnParameters":{"id":8588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8609,"src":"15847:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":8586,"name":"uint24","nodeType":"ElementaryTypeName","src":"15847:6:31","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15846:8:31"},"scope":9525,"src":"15791:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8636,"nodeType":"Block","src":"16355:149:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8617,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8612,"src":"16369:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8620,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16382:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":8619,"name":"uint16","nodeType":"ElementaryTypeName","src":"16382:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":8618,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16377:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8621,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16377:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":8622,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16390:3:31","memberName":"max","nodeType":"MemberAccess","src":"16377:16:31","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16369:24:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8630,"nodeType":"IfStatement","src":"16365:103:31","trueBody":{"id":8629,"nodeType":"Block","src":"16395:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":8625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16447:2:31","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":8626,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8612,"src":"16451:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8624,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"16416:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16416:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8628,"nodeType":"RevertStatement","src":"16409:48:31"}]}},{"expression":{"arguments":[{"id":8633,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8612,"src":"16491:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8632,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16484:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":8631,"name":"uint16","nodeType":"ElementaryTypeName","src":"16484:6:31","typeDescriptions":{}}},"id":8634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16484:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":8616,"id":8635,"nodeType":"Return","src":"16477:20:31"}]},"documentation":{"id":8610,"nodeType":"StructuredDocumentation","src":"16010:276:31","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":8637,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16300:8:31","nodeType":"FunctionDefinition","parameters":{"id":8613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8612,"mutability":"mutable","name":"value","nameLocation":"16317:5:31","nodeType":"VariableDeclaration","scope":8637,"src":"16309:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8611,"name":"uint256","nodeType":"ElementaryTypeName","src":"16309:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16308:15:31"},"returnParameters":{"id":8616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8615,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8637,"src":"16347:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":8614,"name":"uint16","nodeType":"ElementaryTypeName","src":"16347:6:31","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16346:8:31"},"scope":9525,"src":"16291:213:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8664,"nodeType":"Block","src":"16849:146:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8645,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8640,"src":"16863:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16876:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8647,"name":"uint8","nodeType":"ElementaryTypeName","src":"16876:5:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":8646,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16871:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16871:11:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":8650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16883:3:31","memberName":"max","nodeType":"MemberAccess","src":"16871:15:31","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16863:23:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8658,"nodeType":"IfStatement","src":"16859:101:31","trueBody":{"id":8657,"nodeType":"Block","src":"16888:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":8653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16940:1:31","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":8654,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8640,"src":"16943:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8652,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7780,"src":"16909:30:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16909:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8656,"nodeType":"RevertStatement","src":"16902:47:31"}]}},{"expression":{"arguments":[{"id":8661,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8640,"src":"16982:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16976:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8659,"name":"uint8","nodeType":"ElementaryTypeName","src":"16976:5:31","typeDescriptions":{}}},"id":8662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16976:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":8644,"id":8663,"nodeType":"Return","src":"16969:19:31"}]},"documentation":{"id":8638,"nodeType":"StructuredDocumentation","src":"16510:272:31","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":8665,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16796:7:31","nodeType":"FunctionDefinition","parameters":{"id":8641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8640,"mutability":"mutable","name":"value","nameLocation":"16812:5:31","nodeType":"VariableDeclaration","scope":8665,"src":"16804:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8639,"name":"uint256","nodeType":"ElementaryTypeName","src":"16804:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16803:15:31"},"returnParameters":{"id":8644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8665,"src":"16842:5:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8642,"name":"uint8","nodeType":"ElementaryTypeName","src":"16842:5:31","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16841:7:31"},"scope":9525,"src":"16787:208:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8687,"nodeType":"Block","src":"17231:128:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8673,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8668,"src":"17245:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":8674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17253:1:31","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17245:9:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8681,"nodeType":"IfStatement","src":"17241:81:31","trueBody":{"id":8680,"nodeType":"Block","src":"17256:66:31","statements":[{"errorCall":{"arguments":[{"id":8677,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8668,"src":"17305:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8676,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7785,"src":"17277:27:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":8678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17277:34:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8679,"nodeType":"RevertStatement","src":"17270:41:31"}]}},{"expression":{"arguments":[{"id":8684,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8668,"src":"17346:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8683,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17338:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8682,"name":"uint256","nodeType":"ElementaryTypeName","src":"17338:7:31","typeDescriptions":{}}},"id":8685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17338:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8672,"id":8686,"nodeType":"Return","src":"17331:21:31"}]},"documentation":{"id":8666,"nodeType":"StructuredDocumentation","src":"17001:160:31","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":8688,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17175:9:31","nodeType":"FunctionDefinition","parameters":{"id":8669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8668,"mutability":"mutable","name":"value","nameLocation":"17192:5:31","nodeType":"VariableDeclaration","scope":8688,"src":"17185:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8667,"name":"int256","nodeType":"ElementaryTypeName","src":"17185:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17184:14:31"},"returnParameters":{"id":8672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8671,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8688,"src":"17222:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8670,"name":"uint256","nodeType":"ElementaryTypeName","src":"17222:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17221:9:31"},"scope":9525,"src":"17166:193:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8713,"nodeType":"Block","src":"17756:150:31","statements":[{"expression":{"id":8701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8696,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8694,"src":"17766:10:31","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8699,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"17786:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17779:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":8697,"name":"int248","nodeType":"ElementaryTypeName","src":"17779:6:31","typeDescriptions":{}}},"id":8700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17779:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17766:26:31","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":8702,"nodeType":"ExpressionStatement","src":"17766:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8703,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8694,"src":"17806:10:31","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8704,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"17820:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17806:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8712,"nodeType":"IfStatement","src":"17802:98:31","trueBody":{"id":8711,"nodeType":"Block","src":"17827:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":8707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17878:3:31","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":8708,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"17883:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8706,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"17848:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8710,"nodeType":"RevertStatement","src":"17841:48:31"}]}}]},"documentation":{"id":8689,"nodeType":"StructuredDocumentation","src":"17365:312:31","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":8714,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17691:8:31","nodeType":"FunctionDefinition","parameters":{"id":8692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8691,"mutability":"mutable","name":"value","nameLocation":"17707:5:31","nodeType":"VariableDeclaration","scope":8714,"src":"17700:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8690,"name":"int256","nodeType":"ElementaryTypeName","src":"17700:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17699:14:31"},"returnParameters":{"id":8695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8694,"mutability":"mutable","name":"downcasted","nameLocation":"17744:10:31","nodeType":"VariableDeclaration","scope":8714,"src":"17737:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":8693,"name":"int248","nodeType":"ElementaryTypeName","src":"17737:6:31","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17736:19:31"},"scope":9525,"src":"17682:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8739,"nodeType":"Block","src":"18303:150:31","statements":[{"expression":{"id":8727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8722,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8720,"src":"18313:10:31","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8725,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"18333:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18326:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":8723,"name":"int240","nodeType":"ElementaryTypeName","src":"18326:6:31","typeDescriptions":{}}},"id":8726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18313:26:31","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":8728,"nodeType":"ExpressionStatement","src":"18313:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8729,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8720,"src":"18353:10:31","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8730,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"18367:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18353:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8738,"nodeType":"IfStatement","src":"18349:98:31","trueBody":{"id":8737,"nodeType":"Block","src":"18374:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":8733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18425:3:31","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":8734,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"18430:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8732,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"18395:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18395:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8736,"nodeType":"RevertStatement","src":"18388:48:31"}]}}]},"documentation":{"id":8715,"nodeType":"StructuredDocumentation","src":"17912:312:31","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":8740,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18238:8:31","nodeType":"FunctionDefinition","parameters":{"id":8718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8717,"mutability":"mutable","name":"value","nameLocation":"18254:5:31","nodeType":"VariableDeclaration","scope":8740,"src":"18247:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8716,"name":"int256","nodeType":"ElementaryTypeName","src":"18247:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18246:14:31"},"returnParameters":{"id":8721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8720,"mutability":"mutable","name":"downcasted","nameLocation":"18291:10:31","nodeType":"VariableDeclaration","scope":8740,"src":"18284:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":8719,"name":"int240","nodeType":"ElementaryTypeName","src":"18284:6:31","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18283:19:31"},"scope":9525,"src":"18229:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8765,"nodeType":"Block","src":"18850:150:31","statements":[{"expression":{"id":8753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8748,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8746,"src":"18860:10:31","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8751,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"18880:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18873:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":8749,"name":"int232","nodeType":"ElementaryTypeName","src":"18873:6:31","typeDescriptions":{}}},"id":8752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18873:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18860:26:31","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":8754,"nodeType":"ExpressionStatement","src":"18860:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8755,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8746,"src":"18900:10:31","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8756,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"18914:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18900:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8764,"nodeType":"IfStatement","src":"18896:98:31","trueBody":{"id":8763,"nodeType":"Block","src":"18921:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":8759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18972:3:31","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":8760,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"18977:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8758,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"18942:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18942:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8762,"nodeType":"RevertStatement","src":"18935:48:31"}]}}]},"documentation":{"id":8741,"nodeType":"StructuredDocumentation","src":"18459:312:31","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":8766,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18785:8:31","nodeType":"FunctionDefinition","parameters":{"id":8744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8743,"mutability":"mutable","name":"value","nameLocation":"18801:5:31","nodeType":"VariableDeclaration","scope":8766,"src":"18794:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8742,"name":"int256","nodeType":"ElementaryTypeName","src":"18794:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18793:14:31"},"returnParameters":{"id":8747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8746,"mutability":"mutable","name":"downcasted","nameLocation":"18838:10:31","nodeType":"VariableDeclaration","scope":8766,"src":"18831:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":8745,"name":"int232","nodeType":"ElementaryTypeName","src":"18831:6:31","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18830:19:31"},"scope":9525,"src":"18776:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8791,"nodeType":"Block","src":"19397:150:31","statements":[{"expression":{"id":8779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8774,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8772,"src":"19407:10:31","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8777,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"19427:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8776,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19420:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":8775,"name":"int224","nodeType":"ElementaryTypeName","src":"19420:6:31","typeDescriptions":{}}},"id":8778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19420:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19407:26:31","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":8780,"nodeType":"ExpressionStatement","src":"19407:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8781,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8772,"src":"19447:10:31","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8782,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"19461:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19447:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8790,"nodeType":"IfStatement","src":"19443:98:31","trueBody":{"id":8789,"nodeType":"Block","src":"19468:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":8785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19519:3:31","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":8786,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"19524:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8784,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"19489:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19489:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8788,"nodeType":"RevertStatement","src":"19482:48:31"}]}}]},"documentation":{"id":8767,"nodeType":"StructuredDocumentation","src":"19006:312:31","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":8792,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19332:8:31","nodeType":"FunctionDefinition","parameters":{"id":8770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8769,"mutability":"mutable","name":"value","nameLocation":"19348:5:31","nodeType":"VariableDeclaration","scope":8792,"src":"19341:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8768,"name":"int256","nodeType":"ElementaryTypeName","src":"19341:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19340:14:31"},"returnParameters":{"id":8773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8772,"mutability":"mutable","name":"downcasted","nameLocation":"19385:10:31","nodeType":"VariableDeclaration","scope":8792,"src":"19378:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":8771,"name":"int224","nodeType":"ElementaryTypeName","src":"19378:6:31","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19377:19:31"},"scope":9525,"src":"19323:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8817,"nodeType":"Block","src":"19944:150:31","statements":[{"expression":{"id":8805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8800,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8798,"src":"19954:10:31","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8803,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"19974:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8802,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19967:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":8801,"name":"int216","nodeType":"ElementaryTypeName","src":"19967:6:31","typeDescriptions":{}}},"id":8804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19967:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19954:26:31","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":8806,"nodeType":"ExpressionStatement","src":"19954:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8807,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8798,"src":"19994:10:31","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8808,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"20008:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19994:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8816,"nodeType":"IfStatement","src":"19990:98:31","trueBody":{"id":8815,"nodeType":"Block","src":"20015:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":8811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20066:3:31","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":8812,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"20071:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8810,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"20036:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20036:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8814,"nodeType":"RevertStatement","src":"20029:48:31"}]}}]},"documentation":{"id":8793,"nodeType":"StructuredDocumentation","src":"19553:312:31","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":8818,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19879:8:31","nodeType":"FunctionDefinition","parameters":{"id":8796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8795,"mutability":"mutable","name":"value","nameLocation":"19895:5:31","nodeType":"VariableDeclaration","scope":8818,"src":"19888:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8794,"name":"int256","nodeType":"ElementaryTypeName","src":"19888:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19887:14:31"},"returnParameters":{"id":8799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8798,"mutability":"mutable","name":"downcasted","nameLocation":"19932:10:31","nodeType":"VariableDeclaration","scope":8818,"src":"19925:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":8797,"name":"int216","nodeType":"ElementaryTypeName","src":"19925:6:31","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19924:19:31"},"scope":9525,"src":"19870:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8843,"nodeType":"Block","src":"20491:150:31","statements":[{"expression":{"id":8831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8826,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8824,"src":"20501:10:31","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8829,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8821,"src":"20521:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20514:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":8827,"name":"int208","nodeType":"ElementaryTypeName","src":"20514:6:31","typeDescriptions":{}}},"id":8830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20514:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20501:26:31","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":8832,"nodeType":"ExpressionStatement","src":"20501:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8833,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8824,"src":"20541:10:31","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8834,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8821,"src":"20555:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20541:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8842,"nodeType":"IfStatement","src":"20537:98:31","trueBody":{"id":8841,"nodeType":"Block","src":"20562:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":8837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20613:3:31","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":8838,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8821,"src":"20618:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8836,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"20583:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20583:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8840,"nodeType":"RevertStatement","src":"20576:48:31"}]}}]},"documentation":{"id":8819,"nodeType":"StructuredDocumentation","src":"20100:312:31","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":8844,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20426:8:31","nodeType":"FunctionDefinition","parameters":{"id":8822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8821,"mutability":"mutable","name":"value","nameLocation":"20442:5:31","nodeType":"VariableDeclaration","scope":8844,"src":"20435:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8820,"name":"int256","nodeType":"ElementaryTypeName","src":"20435:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20434:14:31"},"returnParameters":{"id":8825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8824,"mutability":"mutable","name":"downcasted","nameLocation":"20479:10:31","nodeType":"VariableDeclaration","scope":8844,"src":"20472:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":8823,"name":"int208","nodeType":"ElementaryTypeName","src":"20472:6:31","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20471:19:31"},"scope":9525,"src":"20417:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8869,"nodeType":"Block","src":"21038:150:31","statements":[{"expression":{"id":8857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8852,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"21048:10:31","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8855,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8847,"src":"21068:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21061:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":8853,"name":"int200","nodeType":"ElementaryTypeName","src":"21061:6:31","typeDescriptions":{}}},"id":8856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21061:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21048:26:31","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":8858,"nodeType":"ExpressionStatement","src":"21048:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8859,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8850,"src":"21088:10:31","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8860,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8847,"src":"21102:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21088:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8868,"nodeType":"IfStatement","src":"21084:98:31","trueBody":{"id":8867,"nodeType":"Block","src":"21109:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":8863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21160:3:31","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":8864,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8847,"src":"21165:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8862,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"21130:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21130:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8866,"nodeType":"RevertStatement","src":"21123:48:31"}]}}]},"documentation":{"id":8845,"nodeType":"StructuredDocumentation","src":"20647:312:31","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":8870,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20973:8:31","nodeType":"FunctionDefinition","parameters":{"id":8848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8847,"mutability":"mutable","name":"value","nameLocation":"20989:5:31","nodeType":"VariableDeclaration","scope":8870,"src":"20982:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8846,"name":"int256","nodeType":"ElementaryTypeName","src":"20982:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20981:14:31"},"returnParameters":{"id":8851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8850,"mutability":"mutable","name":"downcasted","nameLocation":"21026:10:31","nodeType":"VariableDeclaration","scope":8870,"src":"21019:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":8849,"name":"int200","nodeType":"ElementaryTypeName","src":"21019:6:31","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21018:19:31"},"scope":9525,"src":"20964:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8895,"nodeType":"Block","src":"21585:150:31","statements":[{"expression":{"id":8883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8878,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8876,"src":"21595:10:31","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8881,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8873,"src":"21615:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21608:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":8879,"name":"int192","nodeType":"ElementaryTypeName","src":"21608:6:31","typeDescriptions":{}}},"id":8882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21608:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21595:26:31","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":8884,"nodeType":"ExpressionStatement","src":"21595:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8885,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8876,"src":"21635:10:31","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8886,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8873,"src":"21649:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21635:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8894,"nodeType":"IfStatement","src":"21631:98:31","trueBody":{"id":8893,"nodeType":"Block","src":"21656:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":8889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21707:3:31","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":8890,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8873,"src":"21712:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8888,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"21677:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21677:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8892,"nodeType":"RevertStatement","src":"21670:48:31"}]}}]},"documentation":{"id":8871,"nodeType":"StructuredDocumentation","src":"21194:312:31","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":8896,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21520:8:31","nodeType":"FunctionDefinition","parameters":{"id":8874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8873,"mutability":"mutable","name":"value","nameLocation":"21536:5:31","nodeType":"VariableDeclaration","scope":8896,"src":"21529:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8872,"name":"int256","nodeType":"ElementaryTypeName","src":"21529:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21528:14:31"},"returnParameters":{"id":8877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8876,"mutability":"mutable","name":"downcasted","nameLocation":"21573:10:31","nodeType":"VariableDeclaration","scope":8896,"src":"21566:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":8875,"name":"int192","nodeType":"ElementaryTypeName","src":"21566:6:31","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21565:19:31"},"scope":9525,"src":"21511:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8921,"nodeType":"Block","src":"22132:150:31","statements":[{"expression":{"id":8909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8904,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"22142:10:31","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8907,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8899,"src":"22162:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22155:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":8905,"name":"int184","nodeType":"ElementaryTypeName","src":"22155:6:31","typeDescriptions":{}}},"id":8908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22155:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22142:26:31","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":8910,"nodeType":"ExpressionStatement","src":"22142:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8911,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8902,"src":"22182:10:31","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8912,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8899,"src":"22196:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22182:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8920,"nodeType":"IfStatement","src":"22178:98:31","trueBody":{"id":8919,"nodeType":"Block","src":"22203:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":8915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22254:3:31","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":8916,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8899,"src":"22259:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8914,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"22224:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22224:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8918,"nodeType":"RevertStatement","src":"22217:48:31"}]}}]},"documentation":{"id":8897,"nodeType":"StructuredDocumentation","src":"21741:312:31","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":8922,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22067:8:31","nodeType":"FunctionDefinition","parameters":{"id":8900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8899,"mutability":"mutable","name":"value","nameLocation":"22083:5:31","nodeType":"VariableDeclaration","scope":8922,"src":"22076:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8898,"name":"int256","nodeType":"ElementaryTypeName","src":"22076:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22075:14:31"},"returnParameters":{"id":8903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8902,"mutability":"mutable","name":"downcasted","nameLocation":"22120:10:31","nodeType":"VariableDeclaration","scope":8922,"src":"22113:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":8901,"name":"int184","nodeType":"ElementaryTypeName","src":"22113:6:31","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22112:19:31"},"scope":9525,"src":"22058:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8947,"nodeType":"Block","src":"22679:150:31","statements":[{"expression":{"id":8935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8930,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8928,"src":"22689:10:31","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8933,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8925,"src":"22709:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22702:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":8931,"name":"int176","nodeType":"ElementaryTypeName","src":"22702:6:31","typeDescriptions":{}}},"id":8934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22702:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22689:26:31","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":8936,"nodeType":"ExpressionStatement","src":"22689:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8937,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8928,"src":"22729:10:31","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8938,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8925,"src":"22743:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22729:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8946,"nodeType":"IfStatement","src":"22725:98:31","trueBody":{"id":8945,"nodeType":"Block","src":"22750:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":8941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22801:3:31","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":8942,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8925,"src":"22806:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8940,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"22771:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22771:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8944,"nodeType":"RevertStatement","src":"22764:48:31"}]}}]},"documentation":{"id":8923,"nodeType":"StructuredDocumentation","src":"22288:312:31","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":8948,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22614:8:31","nodeType":"FunctionDefinition","parameters":{"id":8926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8925,"mutability":"mutable","name":"value","nameLocation":"22630:5:31","nodeType":"VariableDeclaration","scope":8948,"src":"22623:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8924,"name":"int256","nodeType":"ElementaryTypeName","src":"22623:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22622:14:31"},"returnParameters":{"id":8929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8928,"mutability":"mutable","name":"downcasted","nameLocation":"22667:10:31","nodeType":"VariableDeclaration","scope":8948,"src":"22660:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":8927,"name":"int176","nodeType":"ElementaryTypeName","src":"22660:6:31","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22659:19:31"},"scope":9525,"src":"22605:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8973,"nodeType":"Block","src":"23226:150:31","statements":[{"expression":{"id":8961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8956,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8954,"src":"23236:10:31","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8959,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8951,"src":"23256:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23249:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":8957,"name":"int168","nodeType":"ElementaryTypeName","src":"23249:6:31","typeDescriptions":{}}},"id":8960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23249:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23236:26:31","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":8962,"nodeType":"ExpressionStatement","src":"23236:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8963,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8954,"src":"23276:10:31","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8964,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8951,"src":"23290:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23276:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8972,"nodeType":"IfStatement","src":"23272:98:31","trueBody":{"id":8971,"nodeType":"Block","src":"23297:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":8967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23348:3:31","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":8968,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8951,"src":"23353:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8966,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"23318:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23318:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8970,"nodeType":"RevertStatement","src":"23311:48:31"}]}}]},"documentation":{"id":8949,"nodeType":"StructuredDocumentation","src":"22835:312:31","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":8974,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23161:8:31","nodeType":"FunctionDefinition","parameters":{"id":8952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8951,"mutability":"mutable","name":"value","nameLocation":"23177:5:31","nodeType":"VariableDeclaration","scope":8974,"src":"23170:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8950,"name":"int256","nodeType":"ElementaryTypeName","src":"23170:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23169:14:31"},"returnParameters":{"id":8955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8954,"mutability":"mutable","name":"downcasted","nameLocation":"23214:10:31","nodeType":"VariableDeclaration","scope":8974,"src":"23207:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":8953,"name":"int168","nodeType":"ElementaryTypeName","src":"23207:6:31","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23206:19:31"},"scope":9525,"src":"23152:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8999,"nodeType":"Block","src":"23773:150:31","statements":[{"expression":{"id":8987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8982,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8980,"src":"23783:10:31","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8985,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8977,"src":"23803:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8984,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23796:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":8983,"name":"int160","nodeType":"ElementaryTypeName","src":"23796:6:31","typeDescriptions":{}}},"id":8986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23783:26:31","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":8988,"nodeType":"ExpressionStatement","src":"23783:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8989,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8980,"src":"23823:10:31","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8990,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8977,"src":"23837:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23823:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8998,"nodeType":"IfStatement","src":"23819:98:31","trueBody":{"id":8997,"nodeType":"Block","src":"23844:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":8993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23895:3:31","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":8994,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8977,"src":"23900:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8992,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"23865:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23865:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8996,"nodeType":"RevertStatement","src":"23858:48:31"}]}}]},"documentation":{"id":8975,"nodeType":"StructuredDocumentation","src":"23382:312:31","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":9000,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23708:8:31","nodeType":"FunctionDefinition","parameters":{"id":8978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8977,"mutability":"mutable","name":"value","nameLocation":"23724:5:31","nodeType":"VariableDeclaration","scope":9000,"src":"23717:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8976,"name":"int256","nodeType":"ElementaryTypeName","src":"23717:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23716:14:31"},"returnParameters":{"id":8981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8980,"mutability":"mutable","name":"downcasted","nameLocation":"23761:10:31","nodeType":"VariableDeclaration","scope":9000,"src":"23754:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":8979,"name":"int160","nodeType":"ElementaryTypeName","src":"23754:6:31","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23753:19:31"},"scope":9525,"src":"23699:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9025,"nodeType":"Block","src":"24320:150:31","statements":[{"expression":{"id":9013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9008,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9006,"src":"24330:10:31","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9011,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9003,"src":"24350:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24343:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":9009,"name":"int152","nodeType":"ElementaryTypeName","src":"24343:6:31","typeDescriptions":{}}},"id":9012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24343:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24330:26:31","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":9014,"nodeType":"ExpressionStatement","src":"24330:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9015,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9006,"src":"24370:10:31","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9016,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9003,"src":"24384:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24370:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9024,"nodeType":"IfStatement","src":"24366:98:31","trueBody":{"id":9023,"nodeType":"Block","src":"24391:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":9019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24442:3:31","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":9020,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9003,"src":"24447:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9018,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"24412:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24412:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9022,"nodeType":"RevertStatement","src":"24405:48:31"}]}}]},"documentation":{"id":9001,"nodeType":"StructuredDocumentation","src":"23929:312:31","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":9026,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24255:8:31","nodeType":"FunctionDefinition","parameters":{"id":9004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9003,"mutability":"mutable","name":"value","nameLocation":"24271:5:31","nodeType":"VariableDeclaration","scope":9026,"src":"24264:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9002,"name":"int256","nodeType":"ElementaryTypeName","src":"24264:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24263:14:31"},"returnParameters":{"id":9007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9006,"mutability":"mutable","name":"downcasted","nameLocation":"24308:10:31","nodeType":"VariableDeclaration","scope":9026,"src":"24301:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":9005,"name":"int152","nodeType":"ElementaryTypeName","src":"24301:6:31","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24300:19:31"},"scope":9525,"src":"24246:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9051,"nodeType":"Block","src":"24867:150:31","statements":[{"expression":{"id":9039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9034,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9032,"src":"24877:10:31","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9037,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"24897:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24890:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":9035,"name":"int144","nodeType":"ElementaryTypeName","src":"24890:6:31","typeDescriptions":{}}},"id":9038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24890:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24877:26:31","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":9040,"nodeType":"ExpressionStatement","src":"24877:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9041,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9032,"src":"24917:10:31","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"24931:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24917:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9050,"nodeType":"IfStatement","src":"24913:98:31","trueBody":{"id":9049,"nodeType":"Block","src":"24938:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":9045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24989:3:31","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":9046,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"24994:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9044,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"24959:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24959:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9048,"nodeType":"RevertStatement","src":"24952:48:31"}]}}]},"documentation":{"id":9027,"nodeType":"StructuredDocumentation","src":"24476:312:31","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":9052,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24802:8:31","nodeType":"FunctionDefinition","parameters":{"id":9030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9029,"mutability":"mutable","name":"value","nameLocation":"24818:5:31","nodeType":"VariableDeclaration","scope":9052,"src":"24811:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9028,"name":"int256","nodeType":"ElementaryTypeName","src":"24811:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24810:14:31"},"returnParameters":{"id":9033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9032,"mutability":"mutable","name":"downcasted","nameLocation":"24855:10:31","nodeType":"VariableDeclaration","scope":9052,"src":"24848:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":9031,"name":"int144","nodeType":"ElementaryTypeName","src":"24848:6:31","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24847:19:31"},"scope":9525,"src":"24793:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9077,"nodeType":"Block","src":"25414:150:31","statements":[{"expression":{"id":9065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9060,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"25424:10:31","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9063,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9055,"src":"25444:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25437:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":9061,"name":"int136","nodeType":"ElementaryTypeName","src":"25437:6:31","typeDescriptions":{}}},"id":9064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25437:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25424:26:31","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":9066,"nodeType":"ExpressionStatement","src":"25424:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9067,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"25464:10:31","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9068,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9055,"src":"25478:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25464:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9076,"nodeType":"IfStatement","src":"25460:98:31","trueBody":{"id":9075,"nodeType":"Block","src":"25485:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":9071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25536:3:31","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":9072,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9055,"src":"25541:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9070,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"25506:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25506:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9074,"nodeType":"RevertStatement","src":"25499:48:31"}]}}]},"documentation":{"id":9053,"nodeType":"StructuredDocumentation","src":"25023:312:31","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":9078,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25349:8:31","nodeType":"FunctionDefinition","parameters":{"id":9056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9055,"mutability":"mutable","name":"value","nameLocation":"25365:5:31","nodeType":"VariableDeclaration","scope":9078,"src":"25358:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9054,"name":"int256","nodeType":"ElementaryTypeName","src":"25358:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25357:14:31"},"returnParameters":{"id":9059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9058,"mutability":"mutable","name":"downcasted","nameLocation":"25402:10:31","nodeType":"VariableDeclaration","scope":9078,"src":"25395:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":9057,"name":"int136","nodeType":"ElementaryTypeName","src":"25395:6:31","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25394:19:31"},"scope":9525,"src":"25340:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9103,"nodeType":"Block","src":"25961:150:31","statements":[{"expression":{"id":9091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9086,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9084,"src":"25971:10:31","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9089,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9081,"src":"25991:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25984:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":9087,"name":"int128","nodeType":"ElementaryTypeName","src":"25984:6:31","typeDescriptions":{}}},"id":9090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25984:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25971:26:31","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":9092,"nodeType":"ExpressionStatement","src":"25971:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9093,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9084,"src":"26011:10:31","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9094,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9081,"src":"26025:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26011:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9102,"nodeType":"IfStatement","src":"26007:98:31","trueBody":{"id":9101,"nodeType":"Block","src":"26032:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":9097,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26083:3:31","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":9098,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9081,"src":"26088:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9096,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"26053:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26053:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9100,"nodeType":"RevertStatement","src":"26046:48:31"}]}}]},"documentation":{"id":9079,"nodeType":"StructuredDocumentation","src":"25570:312:31","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":9104,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25896:8:31","nodeType":"FunctionDefinition","parameters":{"id":9082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9081,"mutability":"mutable","name":"value","nameLocation":"25912:5:31","nodeType":"VariableDeclaration","scope":9104,"src":"25905:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9080,"name":"int256","nodeType":"ElementaryTypeName","src":"25905:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25904:14:31"},"returnParameters":{"id":9085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9084,"mutability":"mutable","name":"downcasted","nameLocation":"25949:10:31","nodeType":"VariableDeclaration","scope":9104,"src":"25942:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":9083,"name":"int128","nodeType":"ElementaryTypeName","src":"25942:6:31","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25941:19:31"},"scope":9525,"src":"25887:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9129,"nodeType":"Block","src":"26508:150:31","statements":[{"expression":{"id":9117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9112,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"26518:10:31","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9115,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9107,"src":"26538:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26531:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":9113,"name":"int120","nodeType":"ElementaryTypeName","src":"26531:6:31","typeDescriptions":{}}},"id":9116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26531:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26518:26:31","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":9118,"nodeType":"ExpressionStatement","src":"26518:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9119,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9110,"src":"26558:10:31","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9120,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9107,"src":"26572:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26558:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9128,"nodeType":"IfStatement","src":"26554:98:31","trueBody":{"id":9127,"nodeType":"Block","src":"26579:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":9123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26630:3:31","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":9124,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9107,"src":"26635:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9122,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"26600:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26600:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9126,"nodeType":"RevertStatement","src":"26593:48:31"}]}}]},"documentation":{"id":9105,"nodeType":"StructuredDocumentation","src":"26117:312:31","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":9130,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26443:8:31","nodeType":"FunctionDefinition","parameters":{"id":9108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9107,"mutability":"mutable","name":"value","nameLocation":"26459:5:31","nodeType":"VariableDeclaration","scope":9130,"src":"26452:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9106,"name":"int256","nodeType":"ElementaryTypeName","src":"26452:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26451:14:31"},"returnParameters":{"id":9111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9110,"mutability":"mutable","name":"downcasted","nameLocation":"26496:10:31","nodeType":"VariableDeclaration","scope":9130,"src":"26489:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":9109,"name":"int120","nodeType":"ElementaryTypeName","src":"26489:6:31","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26488:19:31"},"scope":9525,"src":"26434:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9155,"nodeType":"Block","src":"27055:150:31","statements":[{"expression":{"id":9143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9138,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9136,"src":"27065:10:31","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9141,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9133,"src":"27085:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27078:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":9139,"name":"int112","nodeType":"ElementaryTypeName","src":"27078:6:31","typeDescriptions":{}}},"id":9142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27078:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27065:26:31","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":9144,"nodeType":"ExpressionStatement","src":"27065:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9145,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9136,"src":"27105:10:31","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9146,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9133,"src":"27119:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27105:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9154,"nodeType":"IfStatement","src":"27101:98:31","trueBody":{"id":9153,"nodeType":"Block","src":"27126:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":9149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27177:3:31","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":9150,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9133,"src":"27182:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9148,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"27147:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27147:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9152,"nodeType":"RevertStatement","src":"27140:48:31"}]}}]},"documentation":{"id":9131,"nodeType":"StructuredDocumentation","src":"26664:312:31","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":9156,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26990:8:31","nodeType":"FunctionDefinition","parameters":{"id":9134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9133,"mutability":"mutable","name":"value","nameLocation":"27006:5:31","nodeType":"VariableDeclaration","scope":9156,"src":"26999:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9132,"name":"int256","nodeType":"ElementaryTypeName","src":"26999:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26998:14:31"},"returnParameters":{"id":9137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9136,"mutability":"mutable","name":"downcasted","nameLocation":"27043:10:31","nodeType":"VariableDeclaration","scope":9156,"src":"27036:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":9135,"name":"int112","nodeType":"ElementaryTypeName","src":"27036:6:31","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27035:19:31"},"scope":9525,"src":"26981:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9181,"nodeType":"Block","src":"27602:150:31","statements":[{"expression":{"id":9169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9164,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9162,"src":"27612:10:31","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9167,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9159,"src":"27632:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27625:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":9165,"name":"int104","nodeType":"ElementaryTypeName","src":"27625:6:31","typeDescriptions":{}}},"id":9168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27625:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27612:26:31","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":9170,"nodeType":"ExpressionStatement","src":"27612:26:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9171,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9162,"src":"27652:10:31","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9172,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9159,"src":"27666:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27652:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9180,"nodeType":"IfStatement","src":"27648:98:31","trueBody":{"id":9179,"nodeType":"Block","src":"27673:73:31","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":9175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27724:3:31","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":9176,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9159,"src":"27729:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9174,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"27694:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27694:41:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9178,"nodeType":"RevertStatement","src":"27687:48:31"}]}}]},"documentation":{"id":9157,"nodeType":"StructuredDocumentation","src":"27211:312:31","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":9182,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27537:8:31","nodeType":"FunctionDefinition","parameters":{"id":9160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9159,"mutability":"mutable","name":"value","nameLocation":"27553:5:31","nodeType":"VariableDeclaration","scope":9182,"src":"27546:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9158,"name":"int256","nodeType":"ElementaryTypeName","src":"27546:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27545:14:31"},"returnParameters":{"id":9163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9162,"mutability":"mutable","name":"downcasted","nameLocation":"27590:10:31","nodeType":"VariableDeclaration","scope":9182,"src":"27583:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":9161,"name":"int104","nodeType":"ElementaryTypeName","src":"27583:6:31","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27582:19:31"},"scope":9525,"src":"27528:224:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9207,"nodeType":"Block","src":"28142:148:31","statements":[{"expression":{"id":9195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9190,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9188,"src":"28152:10:31","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9193,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"28171:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9192,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28165:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":9191,"name":"int96","nodeType":"ElementaryTypeName","src":"28165:5:31","typeDescriptions":{}}},"id":9194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28165:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28152:25:31","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":9196,"nodeType":"ExpressionStatement","src":"28152:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9197,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9188,"src":"28191:10:31","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9198,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"28205:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28191:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9206,"nodeType":"IfStatement","src":"28187:97:31","trueBody":{"id":9205,"nodeType":"Block","src":"28212:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":9201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28263:2:31","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":9202,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9185,"src":"28267:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9200,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"28233:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28233:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9204,"nodeType":"RevertStatement","src":"28226:47:31"}]}}]},"documentation":{"id":9183,"nodeType":"StructuredDocumentation","src":"27758:307:31","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":9208,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28079:7:31","nodeType":"FunctionDefinition","parameters":{"id":9186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9185,"mutability":"mutable","name":"value","nameLocation":"28094:5:31","nodeType":"VariableDeclaration","scope":9208,"src":"28087:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9184,"name":"int256","nodeType":"ElementaryTypeName","src":"28087:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28086:14:31"},"returnParameters":{"id":9189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9188,"mutability":"mutable","name":"downcasted","nameLocation":"28130:10:31","nodeType":"VariableDeclaration","scope":9208,"src":"28124:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":9187,"name":"int96","nodeType":"ElementaryTypeName","src":"28124:5:31","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28123:18:31"},"scope":9525,"src":"28070:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9233,"nodeType":"Block","src":"28680:148:31","statements":[{"expression":{"id":9221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9216,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9214,"src":"28690:10:31","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9219,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9211,"src":"28709:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9218,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28703:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":9217,"name":"int88","nodeType":"ElementaryTypeName","src":"28703:5:31","typeDescriptions":{}}},"id":9220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28703:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28690:25:31","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":9222,"nodeType":"ExpressionStatement","src":"28690:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9223,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9214,"src":"28729:10:31","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9224,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9211,"src":"28743:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28729:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9232,"nodeType":"IfStatement","src":"28725:97:31","trueBody":{"id":9231,"nodeType":"Block","src":"28750:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":9227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28801:2:31","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":9228,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9211,"src":"28805:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9226,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"28771:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28771:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9230,"nodeType":"RevertStatement","src":"28764:47:31"}]}}]},"documentation":{"id":9209,"nodeType":"StructuredDocumentation","src":"28296:307:31","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":9234,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28617:7:31","nodeType":"FunctionDefinition","parameters":{"id":9212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9211,"mutability":"mutable","name":"value","nameLocation":"28632:5:31","nodeType":"VariableDeclaration","scope":9234,"src":"28625:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9210,"name":"int256","nodeType":"ElementaryTypeName","src":"28625:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28624:14:31"},"returnParameters":{"id":9215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9214,"mutability":"mutable","name":"downcasted","nameLocation":"28668:10:31","nodeType":"VariableDeclaration","scope":9234,"src":"28662:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":9213,"name":"int88","nodeType":"ElementaryTypeName","src":"28662:5:31","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28661:18:31"},"scope":9525,"src":"28608:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9259,"nodeType":"Block","src":"29218:148:31","statements":[{"expression":{"id":9247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9242,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9240,"src":"29228:10:31","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9245,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9237,"src":"29247:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29241:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":9243,"name":"int80","nodeType":"ElementaryTypeName","src":"29241:5:31","typeDescriptions":{}}},"id":9246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29241:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29228:25:31","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":9248,"nodeType":"ExpressionStatement","src":"29228:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9249,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9240,"src":"29267:10:31","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9250,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9237,"src":"29281:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29267:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9258,"nodeType":"IfStatement","src":"29263:97:31","trueBody":{"id":9257,"nodeType":"Block","src":"29288:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":9253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29339:2:31","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":9254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9237,"src":"29343:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9252,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"29309:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29309:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9256,"nodeType":"RevertStatement","src":"29302:47:31"}]}}]},"documentation":{"id":9235,"nodeType":"StructuredDocumentation","src":"28834:307:31","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":9260,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29155:7:31","nodeType":"FunctionDefinition","parameters":{"id":9238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9237,"mutability":"mutable","name":"value","nameLocation":"29170:5:31","nodeType":"VariableDeclaration","scope":9260,"src":"29163:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9236,"name":"int256","nodeType":"ElementaryTypeName","src":"29163:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29162:14:31"},"returnParameters":{"id":9241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9240,"mutability":"mutable","name":"downcasted","nameLocation":"29206:10:31","nodeType":"VariableDeclaration","scope":9260,"src":"29200:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":9239,"name":"int80","nodeType":"ElementaryTypeName","src":"29200:5:31","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29199:18:31"},"scope":9525,"src":"29146:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9285,"nodeType":"Block","src":"29756:148:31","statements":[{"expression":{"id":9273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9268,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9266,"src":"29766:10:31","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9271,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9263,"src":"29785:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9270,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29779:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":9269,"name":"int72","nodeType":"ElementaryTypeName","src":"29779:5:31","typeDescriptions":{}}},"id":9272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29779:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29766:25:31","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":9274,"nodeType":"ExpressionStatement","src":"29766:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9275,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9266,"src":"29805:10:31","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9276,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9263,"src":"29819:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29805:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9284,"nodeType":"IfStatement","src":"29801:97:31","trueBody":{"id":9283,"nodeType":"Block","src":"29826:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":9279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29877:2:31","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":9280,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9263,"src":"29881:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9278,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"29847:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29847:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9282,"nodeType":"RevertStatement","src":"29840:47:31"}]}}]},"documentation":{"id":9261,"nodeType":"StructuredDocumentation","src":"29372:307:31","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":9286,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29693:7:31","nodeType":"FunctionDefinition","parameters":{"id":9264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9263,"mutability":"mutable","name":"value","nameLocation":"29708:5:31","nodeType":"VariableDeclaration","scope":9286,"src":"29701:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9262,"name":"int256","nodeType":"ElementaryTypeName","src":"29701:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29700:14:31"},"returnParameters":{"id":9267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9266,"mutability":"mutable","name":"downcasted","nameLocation":"29744:10:31","nodeType":"VariableDeclaration","scope":9286,"src":"29738:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":9265,"name":"int72","nodeType":"ElementaryTypeName","src":"29738:5:31","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29737:18:31"},"scope":9525,"src":"29684:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9311,"nodeType":"Block","src":"30294:148:31","statements":[{"expression":{"id":9299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9294,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9292,"src":"30304:10:31","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9297,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"30323:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30317:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":9295,"name":"int64","nodeType":"ElementaryTypeName","src":"30317:5:31","typeDescriptions":{}}},"id":9298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30317:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30304:25:31","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":9300,"nodeType":"ExpressionStatement","src":"30304:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9301,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9292,"src":"30343:10:31","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9302,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"30357:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30343:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9310,"nodeType":"IfStatement","src":"30339:97:31","trueBody":{"id":9309,"nodeType":"Block","src":"30364:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":9305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30415:2:31","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":9306,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9289,"src":"30419:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9304,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"30385:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30385:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9308,"nodeType":"RevertStatement","src":"30378:47:31"}]}}]},"documentation":{"id":9287,"nodeType":"StructuredDocumentation","src":"29910:307:31","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":9312,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30231:7:31","nodeType":"FunctionDefinition","parameters":{"id":9290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9289,"mutability":"mutable","name":"value","nameLocation":"30246:5:31","nodeType":"VariableDeclaration","scope":9312,"src":"30239:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9288,"name":"int256","nodeType":"ElementaryTypeName","src":"30239:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30238:14:31"},"returnParameters":{"id":9293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9292,"mutability":"mutable","name":"downcasted","nameLocation":"30282:10:31","nodeType":"VariableDeclaration","scope":9312,"src":"30276:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":9291,"name":"int64","nodeType":"ElementaryTypeName","src":"30276:5:31","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30275:18:31"},"scope":9525,"src":"30222:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9337,"nodeType":"Block","src":"30832:148:31","statements":[{"expression":{"id":9325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9320,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9318,"src":"30842:10:31","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9323,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9315,"src":"30861:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9322,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30855:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":9321,"name":"int56","nodeType":"ElementaryTypeName","src":"30855:5:31","typeDescriptions":{}}},"id":9324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30855:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30842:25:31","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":9326,"nodeType":"ExpressionStatement","src":"30842:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9327,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9318,"src":"30881:10:31","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9328,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9315,"src":"30895:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30881:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9336,"nodeType":"IfStatement","src":"30877:97:31","trueBody":{"id":9335,"nodeType":"Block","src":"30902:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":9331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30953:2:31","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":9332,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9315,"src":"30957:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9330,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"30923:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30923:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9334,"nodeType":"RevertStatement","src":"30916:47:31"}]}}]},"documentation":{"id":9313,"nodeType":"StructuredDocumentation","src":"30448:307:31","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":9338,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30769:7:31","nodeType":"FunctionDefinition","parameters":{"id":9316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9315,"mutability":"mutable","name":"value","nameLocation":"30784:5:31","nodeType":"VariableDeclaration","scope":9338,"src":"30777:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9314,"name":"int256","nodeType":"ElementaryTypeName","src":"30777:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30776:14:31"},"returnParameters":{"id":9319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9318,"mutability":"mutable","name":"downcasted","nameLocation":"30820:10:31","nodeType":"VariableDeclaration","scope":9338,"src":"30814:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":9317,"name":"int56","nodeType":"ElementaryTypeName","src":"30814:5:31","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30813:18:31"},"scope":9525,"src":"30760:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9363,"nodeType":"Block","src":"31370:148:31","statements":[{"expression":{"id":9351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9346,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9344,"src":"31380:10:31","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9349,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9341,"src":"31399:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31393:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":9347,"name":"int48","nodeType":"ElementaryTypeName","src":"31393:5:31","typeDescriptions":{}}},"id":9350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31393:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31380:25:31","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":9352,"nodeType":"ExpressionStatement","src":"31380:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9353,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9344,"src":"31419:10:31","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9354,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9341,"src":"31433:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31419:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9362,"nodeType":"IfStatement","src":"31415:97:31","trueBody":{"id":9361,"nodeType":"Block","src":"31440:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":9357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31491:2:31","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":9358,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9341,"src":"31495:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9356,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"31461:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31461:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9360,"nodeType":"RevertStatement","src":"31454:47:31"}]}}]},"documentation":{"id":9339,"nodeType":"StructuredDocumentation","src":"30986:307:31","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":9364,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31307:7:31","nodeType":"FunctionDefinition","parameters":{"id":9342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9341,"mutability":"mutable","name":"value","nameLocation":"31322:5:31","nodeType":"VariableDeclaration","scope":9364,"src":"31315:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9340,"name":"int256","nodeType":"ElementaryTypeName","src":"31315:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31314:14:31"},"returnParameters":{"id":9345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9344,"mutability":"mutable","name":"downcasted","nameLocation":"31358:10:31","nodeType":"VariableDeclaration","scope":9364,"src":"31352:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":9343,"name":"int48","nodeType":"ElementaryTypeName","src":"31352:5:31","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31351:18:31"},"scope":9525,"src":"31298:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9389,"nodeType":"Block","src":"31908:148:31","statements":[{"expression":{"id":9377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9372,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9370,"src":"31918:10:31","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9375,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"31937:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9374,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31931:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":9373,"name":"int40","nodeType":"ElementaryTypeName","src":"31931:5:31","typeDescriptions":{}}},"id":9376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31918:25:31","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":9378,"nodeType":"ExpressionStatement","src":"31918:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9379,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9370,"src":"31957:10:31","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9380,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"31971:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31957:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9388,"nodeType":"IfStatement","src":"31953:97:31","trueBody":{"id":9387,"nodeType":"Block","src":"31978:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":9383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32029:2:31","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":9384,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9367,"src":"32033:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9382,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"31999:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31999:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9386,"nodeType":"RevertStatement","src":"31992:47:31"}]}}]},"documentation":{"id":9365,"nodeType":"StructuredDocumentation","src":"31524:307:31","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":9390,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31845:7:31","nodeType":"FunctionDefinition","parameters":{"id":9368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9367,"mutability":"mutable","name":"value","nameLocation":"31860:5:31","nodeType":"VariableDeclaration","scope":9390,"src":"31853:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9366,"name":"int256","nodeType":"ElementaryTypeName","src":"31853:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31852:14:31"},"returnParameters":{"id":9371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9370,"mutability":"mutable","name":"downcasted","nameLocation":"31896:10:31","nodeType":"VariableDeclaration","scope":9390,"src":"31890:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":9369,"name":"int40","nodeType":"ElementaryTypeName","src":"31890:5:31","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31889:18:31"},"scope":9525,"src":"31836:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9415,"nodeType":"Block","src":"32446:148:31","statements":[{"expression":{"id":9403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9398,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9396,"src":"32456:10:31","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9401,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9393,"src":"32475:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32469:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":9399,"name":"int32","nodeType":"ElementaryTypeName","src":"32469:5:31","typeDescriptions":{}}},"id":9402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32469:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32456:25:31","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":9404,"nodeType":"ExpressionStatement","src":"32456:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9405,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9396,"src":"32495:10:31","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9406,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9393,"src":"32509:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32495:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9414,"nodeType":"IfStatement","src":"32491:97:31","trueBody":{"id":9413,"nodeType":"Block","src":"32516:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":9409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32567:2:31","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":9410,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9393,"src":"32571:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9408,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"32537:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32537:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9412,"nodeType":"RevertStatement","src":"32530:47:31"}]}}]},"documentation":{"id":9391,"nodeType":"StructuredDocumentation","src":"32062:307:31","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":9416,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32383:7:31","nodeType":"FunctionDefinition","parameters":{"id":9394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9393,"mutability":"mutable","name":"value","nameLocation":"32398:5:31","nodeType":"VariableDeclaration","scope":9416,"src":"32391:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9392,"name":"int256","nodeType":"ElementaryTypeName","src":"32391:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32390:14:31"},"returnParameters":{"id":9397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9396,"mutability":"mutable","name":"downcasted","nameLocation":"32434:10:31","nodeType":"VariableDeclaration","scope":9416,"src":"32428:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":9395,"name":"int32","nodeType":"ElementaryTypeName","src":"32428:5:31","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32427:18:31"},"scope":9525,"src":"32374:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9441,"nodeType":"Block","src":"32984:148:31","statements":[{"expression":{"id":9429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9424,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9422,"src":"32994:10:31","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9427,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9419,"src":"33013:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33007:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":9425,"name":"int24","nodeType":"ElementaryTypeName","src":"33007:5:31","typeDescriptions":{}}},"id":9428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33007:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32994:25:31","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":9430,"nodeType":"ExpressionStatement","src":"32994:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9431,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9422,"src":"33033:10:31","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9432,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9419,"src":"33047:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33033:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9440,"nodeType":"IfStatement","src":"33029:97:31","trueBody":{"id":9439,"nodeType":"Block","src":"33054:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":9435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33105:2:31","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":9436,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9419,"src":"33109:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9434,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"33075:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33075:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9438,"nodeType":"RevertStatement","src":"33068:47:31"}]}}]},"documentation":{"id":9417,"nodeType":"StructuredDocumentation","src":"32600:307:31","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":9442,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32921:7:31","nodeType":"FunctionDefinition","parameters":{"id":9420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9419,"mutability":"mutable","name":"value","nameLocation":"32936:5:31","nodeType":"VariableDeclaration","scope":9442,"src":"32929:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9418,"name":"int256","nodeType":"ElementaryTypeName","src":"32929:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32928:14:31"},"returnParameters":{"id":9423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9422,"mutability":"mutable","name":"downcasted","nameLocation":"32972:10:31","nodeType":"VariableDeclaration","scope":9442,"src":"32966:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":9421,"name":"int24","nodeType":"ElementaryTypeName","src":"32966:5:31","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32965:18:31"},"scope":9525,"src":"32912:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9467,"nodeType":"Block","src":"33522:148:31","statements":[{"expression":{"id":9455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9450,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9448,"src":"33532:10:31","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9453,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"33551:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9452,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33545:5:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":9451,"name":"int16","nodeType":"ElementaryTypeName","src":"33545:5:31","typeDescriptions":{}}},"id":9454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33545:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33532:25:31","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":9456,"nodeType":"ExpressionStatement","src":"33532:25:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9457,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9448,"src":"33571:10:31","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9458,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"33585:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33571:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9466,"nodeType":"IfStatement","src":"33567:97:31","trueBody":{"id":9465,"nodeType":"Block","src":"33592:72:31","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":9461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33643:2:31","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":9462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"33647:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9460,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"33613:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33613:40:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9464,"nodeType":"RevertStatement","src":"33606:47:31"}]}}]},"documentation":{"id":9443,"nodeType":"StructuredDocumentation","src":"33138:307:31","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":9468,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33459:7:31","nodeType":"FunctionDefinition","parameters":{"id":9446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9445,"mutability":"mutable","name":"value","nameLocation":"33474:5:31","nodeType":"VariableDeclaration","scope":9468,"src":"33467:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9444,"name":"int256","nodeType":"ElementaryTypeName","src":"33467:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33466:14:31"},"returnParameters":{"id":9449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9448,"mutability":"mutable","name":"downcasted","nameLocation":"33510:10:31","nodeType":"VariableDeclaration","scope":9468,"src":"33504:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":9447,"name":"int16","nodeType":"ElementaryTypeName","src":"33504:5:31","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33503:18:31"},"scope":9525,"src":"33450:220:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9493,"nodeType":"Block","src":"34053:146:31","statements":[{"expression":{"id":9481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9476,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9474,"src":"34063:10:31","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9479,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9471,"src":"34081:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34076:4:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":9477,"name":"int8","nodeType":"ElementaryTypeName","src":"34076:4:31","typeDescriptions":{}}},"id":9480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34076:11:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34063:24:31","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":9482,"nodeType":"ExpressionStatement","src":"34063:24:31"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9483,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9474,"src":"34101:10:31","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9484,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9471,"src":"34115:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34101:19:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9492,"nodeType":"IfStatement","src":"34097:96:31","trueBody":{"id":9491,"nodeType":"Block","src":"34122:71:31","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":9487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34173:1:31","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":9488,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9471,"src":"34176:5:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9486,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"34143:29:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":9489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34143:39:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9490,"nodeType":"RevertStatement","src":"34136:46:31"}]}}]},"documentation":{"id":9469,"nodeType":"StructuredDocumentation","src":"33676:302:31","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":9494,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33992:6:31","nodeType":"FunctionDefinition","parameters":{"id":9472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9471,"mutability":"mutable","name":"value","nameLocation":"34006:5:31","nodeType":"VariableDeclaration","scope":9494,"src":"33999:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9470,"name":"int256","nodeType":"ElementaryTypeName","src":"33999:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33998:14:31"},"returnParameters":{"id":9475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9474,"mutability":"mutable","name":"downcasted","nameLocation":"34041:10:31","nodeType":"VariableDeclaration","scope":9494,"src":"34036:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":9473,"name":"int8","nodeType":"ElementaryTypeName","src":"34036:4:31","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34035:17:31"},"scope":9525,"src":"33983:216:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9523,"nodeType":"Block","src":"34439:250:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9502,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9497,"src":"34552:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":9507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34573:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":9506,"name":"int256","nodeType":"ElementaryTypeName","src":"34573:6:31","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":9505,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34568:4:31","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34568:12:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":9509,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34581:3:31","memberName":"max","nodeType":"MemberAccess","src":"34568:16:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34560:7:31","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9503,"name":"uint256","nodeType":"ElementaryTypeName","src":"34560:7:31","typeDescriptions":{}}},"id":9510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34560:25:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34552:33:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9517,"nodeType":"IfStatement","src":"34548:105:31","trueBody":{"id":9516,"nodeType":"Block","src":"34587:66:31","statements":[{"errorCall":{"arguments":[{"id":9513,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9497,"src":"34636:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9512,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7797,"src":"34608:27:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":9514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34608:34:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9515,"nodeType":"RevertStatement","src":"34601:41:31"}]}},{"expression":{"arguments":[{"id":9520,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9497,"src":"34676:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34669:6:31","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":9518,"name":"int256","nodeType":"ElementaryTypeName","src":"34669:6:31","typeDescriptions":{}}},"id":9521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34669:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9501,"id":9522,"nodeType":"Return","src":"34662:20:31"}]},"documentation":{"id":9495,"nodeType":"StructuredDocumentation","src":"34205:165:31","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":9524,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34384:8:31","nodeType":"FunctionDefinition","parameters":{"id":9498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9497,"mutability":"mutable","name":"value","nameLocation":"34401:5:31","nodeType":"VariableDeclaration","scope":9524,"src":"34393:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9496,"name":"uint256","nodeType":"ElementaryTypeName","src":"34393:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34392:15:31"},"returnParameters":{"id":9501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9524,"src":"34431:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9499,"name":"int256","nodeType":"ElementaryTypeName","src":"34431:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34430:8:31"},"scope":9525,"src":"34375:314:31","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":9526,"src":"764:33927:31","usedErrors":[7780,7785,7792,7797],"usedEvents":[]}],"src":"192:34500:31"},"id":31},"contracts/BalancerContractRegistryInitializer.sol":{"ast":{"absolutePath":"contracts/BalancerContractRegistryInitializer.sol","exportedSymbols":{"BalancerContractRegistryInitializer":[9857],"ContractType":[66],"IAuthentication":[47],"IBalancerContractRegistry":[235],"IBasicAuthorizer":[32],"IVault":[829],"InputHelpers":[3002],"SingletonAuthentication":[6868]},"id":9858,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9527,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:32"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":9529,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9858,"sourceUnit":48,"src":"72:116:32","symbolAliases":[{"foreign":{"id":9528,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","id":9531,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9858,"sourceUnit":33,"src":"189:114:32","symbolAliases":[{"foreign":{"id":9530,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"198:16:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","file":"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol","id":9534,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9858,"sourceUnit":236,"src":"304:152:32","symbolAliases":[{"foreign":{"id":9532,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":235,"src":"317:25:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":9533,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"348:12:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9536,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9858,"sourceUnit":830,"src":"457:81:32","symbolAliases":[{"foreign":{"id":9535,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"466:6:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":9538,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9858,"sourceUnit":6869,"src":"540:104:32","symbolAliases":[{"foreign":{"id":9537,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"549:23:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":9540,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9858,"sourceUnit":3003,"src":"645:99:32","symbolAliases":[{"foreign":{"id":9539,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3002,"src":"654:12:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BalancerContractRegistryInitializer","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":9857,"linearizedBaseContracts":[9857],"name":"BalancerContractRegistryInitializer","nameLocation":"816:35:32","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"2623a2d0","id":9543,"mutability":"immutable","name":"balancerContractRegistry","nameLocation":"901:24:32","nodeType":"VariableDeclaration","scope":9857,"src":"858:67:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":9542,"nodeType":"UserDefinedTypeName","pathNode":{"id":9541,"name":"IBalancerContractRegistry","nameLocations":["858:25:32"],"nodeType":"IdentifierPath","referencedDeclaration":235,"src":"858:25:32"},"referencedDeclaration":235,"src":"858:25:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}},"visibility":"public"},{"constant":false,"id":9546,"mutability":"immutable","name":"_authorizer","nameLocation":"1031:11:32","nodeType":"VariableDeclaration","scope":9857,"src":"995:47:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"},"typeName":{"id":9545,"nodeType":"UserDefinedTypeName","pathNode":{"id":9544,"name":"IBasicAuthorizer","nameLocations":["995:16:32"],"nodeType":"IdentifierPath","referencedDeclaration":32,"src":"995:16:32"},"referencedDeclaration":32,"src":"995:16:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"visibility":"internal"},{"constant":false,"id":9548,"mutability":"mutable","name":"_initialized","nameLocation":"1109:12:32","nodeType":"VariableDeclaration","scope":9857,"src":"1096:25:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9547,"name":"bool","nodeType":"ElementaryTypeName","src":"1096:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"id":9551,"mutability":"mutable","name":"_routerNames","nameLocation":"1145:12:32","nodeType":"VariableDeclaration","scope":9857,"src":"1128:29:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":9549,"name":"string","nodeType":"ElementaryTypeName","src":"1128:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":9550,"nodeType":"ArrayTypeName","src":"1128:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":9554,"mutability":"mutable","name":"_routerAddresses","nameLocation":"1181:16:32","nodeType":"VariableDeclaration","scope":9857,"src":"1163:34:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":9552,"name":"address","nodeType":"ElementaryTypeName","src":"1163:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9553,"nodeType":"ArrayTypeName","src":"1163:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":9557,"mutability":"mutable","name":"_poolFactoryNames","nameLocation":"1221:17:32","nodeType":"VariableDeclaration","scope":9857,"src":"1204:34:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":9555,"name":"string","nodeType":"ElementaryTypeName","src":"1204:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":9556,"nodeType":"ArrayTypeName","src":"1204:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":9560,"mutability":"mutable","name":"_poolFactoryAddresses","nameLocation":"1262:21:32","nodeType":"VariableDeclaration","scope":9857,"src":"1244:39:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":9558,"name":"address","nodeType":"ElementaryTypeName","src":"1244:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9559,"nodeType":"ArrayTypeName","src":"1244:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":9563,"mutability":"mutable","name":"_aliasNames","nameLocation":"1307:11:32","nodeType":"VariableDeclaration","scope":9857,"src":"1290:28:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string[]"},"typeName":{"baseType":{"id":9561,"name":"string","nodeType":"ElementaryTypeName","src":"1290:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":9562,"nodeType":"ArrayTypeName","src":"1290:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"private"},{"constant":false,"id":9566,"mutability":"mutable","name":"_aliasAddresses","nameLocation":"1342:15:32","nodeType":"VariableDeclaration","scope":9857,"src":"1324:33:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":9564,"name":"address","nodeType":"ElementaryTypeName","src":"1324:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9565,"nodeType":"ArrayTypeName","src":"1324:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"documentation":{"id":9567,"nodeType":"StructuredDocumentation","src":"1364:53:32","text":"@notice The initialization can only be done once."},"errorSelector":"0dc149f0","id":9569,"name":"AlreadyInitialized","nameLocation":"1428:18:32","nodeType":"ErrorDefinition","parameters":{"id":9568,"nodeType":"ParameterList","parameters":[],"src":"1446:2:32"},"src":"1422:27:32"},{"documentation":{"id":9570,"nodeType":"StructuredDocumentation","src":"1455:103:32","text":"@notice The Vault passed in as a sanity check doesn't match the Vault associated with the registry."},"errorSelector":"c1faacc5","id":9572,"name":"VaultMismatch","nameLocation":"1569:13:32","nodeType":"ErrorDefinition","parameters":{"id":9571,"nodeType":"ParameterList","parameters":[],"src":"1582:2:32"},"src":"1563:22:32"},{"body":{"id":9685,"nodeType":"Block","src":"1937:958:32","statements":[{"expression":{"arguments":[{"expression":{"id":9602,"name":"_routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"1983:12:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1996:6:32","memberName":"length","nodeType":"MemberAccess","src":"1983:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9604,"name":"_routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9554,"src":"2004:16:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2021:6:32","memberName":"length","nodeType":"MemberAccess","src":"2004:23:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9599,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3002,"src":"1947:12:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$3002_$","typeString":"type(library InputHelpers)"}},"id":9601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1960:22:32","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2735,"src":"1947:35:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":9606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1947:81:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9607,"nodeType":"ExpressionStatement","src":"1947:81:32"},{"expression":{"arguments":[{"expression":{"id":9611,"name":"_poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9557,"src":"2074:17:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2092:6:32","memberName":"length","nodeType":"MemberAccess","src":"2074:24:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9613,"name":"_poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9560,"src":"2100:21:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2122:6:32","memberName":"length","nodeType":"MemberAccess","src":"2100:28:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9608,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3002,"src":"2038:12:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$3002_$","typeString":"type(library InputHelpers)"}},"id":9610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2051:22:32","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2735,"src":"2038:35:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":9615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2038:91:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9616,"nodeType":"ExpressionStatement","src":"2038:91:32"},{"expression":{"arguments":[{"expression":{"id":9620,"name":"_aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9563,"src":"2175:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2187:6:32","memberName":"length","nodeType":"MemberAccess","src":"2175:18:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":9622,"name":"_aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9566,"src":"2195:15:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2211:6:32","memberName":"length","nodeType":"MemberAccess","src":"2195:22:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9617,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3002,"src":"2139:12:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$3002_$","typeString":"type(library InputHelpers)"}},"id":9619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2152:22:32","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":2735,"src":"2139:35:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":9624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2139:79:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9625,"nodeType":"ExpressionStatement","src":"2139:79:32"},{"assignments":[9628],"declarations":[{"constant":false,"id":9628,"mutability":"mutable","name":"registryVault","nameLocation":"2325:13:32","nodeType":"VariableDeclaration","scope":9685,"src":"2318:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":9627,"nodeType":"UserDefinedTypeName","pathNode":{"id":9626,"name":"IVault","nameLocations":["2318:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"2318:6:32"},"referencedDeclaration":829,"src":"2318:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"}],"id":9637,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":9632,"name":"balancerContractRegistry_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9578,"src":"2373:25:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}],"id":9631,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2365:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9630,"name":"address","nodeType":"ElementaryTypeName","src":"2365:7:32","typeDescriptions":{}}},"id":9633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2365:34:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9629,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"2341:23:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SingletonAuthentication_$6868_$","typeString":"type(contract SingletonAuthentication)"}},"id":9634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2341:59:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$6868","typeString":"contract SingletonAuthentication"}},"id":9635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2401:8:32","memberName":"getVault","nodeType":"MemberAccess","referencedDeclaration":6854,"src":"2341:68:32","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$829_$","typeString":"function () view external returns (contract IVault)"}},"id":9636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2341:70:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"nodeType":"VariableDeclarationStatement","src":"2318:93:32"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"id":9640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9638,"name":"registryVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9628,"src":"2425:13:32","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9639,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9575,"src":"2442:5:32","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"src":"2425:22:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9645,"nodeType":"IfStatement","src":"2421:75:32","trueBody":{"id":9644,"nodeType":"Block","src":"2449:47:32","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9641,"name":"VaultMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9572,"src":"2470:13:32","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2470:15:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9643,"nodeType":"RevertStatement","src":"2463:22:32"}]}},{"expression":{"id":9648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9646,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9543,"src":"2506:24:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9647,"name":"balancerContractRegistry_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9578,"src":"2533:25:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}},"src":"2506:52:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}},"id":9649,"nodeType":"ExpressionStatement","src":"2506:52:32"},{"expression":{"id":9652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9650,"name":"_routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"2569:12:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9651,"name":"routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"2584:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2569:26:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9653,"nodeType":"ExpressionStatement","src":"2569:26:32"},{"expression":{"id":9656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9654,"name":"_routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9554,"src":"2605:16:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9655,"name":"routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9584,"src":"2624:15:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2605:34:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9657,"nodeType":"ExpressionStatement","src":"2605:34:32"},{"expression":{"id":9660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9658,"name":"_poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9557,"src":"2649:17:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9659,"name":"poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9587,"src":"2669:16:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2649:36:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9661,"nodeType":"ExpressionStatement","src":"2649:36:32"},{"expression":{"id":9664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9662,"name":"_poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9560,"src":"2695:21:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9663,"name":"poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9590,"src":"2719:20:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2695:44:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9665,"nodeType":"ExpressionStatement","src":"2695:44:32"},{"expression":{"id":9668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9666,"name":"_aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9563,"src":"2749:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9667,"name":"aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9593,"src":"2763:10:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string memory[] memory"}},"src":"2749:24:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9669,"nodeType":"ExpressionStatement","src":"2749:24:32"},{"expression":{"id":9672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9670,"name":"_aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9566,"src":"2783:15:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9671,"name":"aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9596,"src":"2801:14:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"2783:32:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9673,"nodeType":"ExpressionStatement","src":"2783:32:32"},{"expression":{"id":9683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9674,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"2826:11:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9678,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9575,"src":"2865:5:32","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":9679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2871:13:32","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2143,"src":"2865:19:32","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$251_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":9680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2865:21:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}],"id":9677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2857:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9676,"name":"address","nodeType":"ElementaryTypeName","src":"2857:7:32","typeDescriptions":{}}},"id":9681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2857:30:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9675,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"2840:16:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasicAuthorizer_$32_$","typeString":"type(contract IBasicAuthorizer)"}},"id":9682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2840:48:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"src":"2826:62:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9684,"nodeType":"ExpressionStatement","src":"2826:62:32"}]},"id":9686,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9575,"mutability":"mutable","name":"vault","nameLocation":"1619:5:32","nodeType":"VariableDeclaration","scope":9686,"src":"1612:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":9574,"nodeType":"UserDefinedTypeName","pathNode":{"id":9573,"name":"IVault","nameLocations":["1612:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"1612:6:32"},"referencedDeclaration":829,"src":"1612:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":9578,"mutability":"mutable","name":"balancerContractRegistry_","nameLocation":"1660:25:32","nodeType":"VariableDeclaration","scope":9686,"src":"1634:51:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"},"typeName":{"id":9577,"nodeType":"UserDefinedTypeName","pathNode":{"id":9576,"name":"IBalancerContractRegistry","nameLocations":["1634:25:32"],"nodeType":"IdentifierPath","referencedDeclaration":235,"src":"1634:25:32"},"referencedDeclaration":235,"src":"1634:25:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}},"visibility":"internal"},{"constant":false,"id":9581,"mutability":"mutable","name":"routerNames","nameLocation":"1711:11:32","nodeType":"VariableDeclaration","scope":9686,"src":"1695:27:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":9579,"name":"string","nodeType":"ElementaryTypeName","src":"1695:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":9580,"nodeType":"ArrayTypeName","src":"1695:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":9584,"mutability":"mutable","name":"routerAddresses","nameLocation":"1749:15:32","nodeType":"VariableDeclaration","scope":9686,"src":"1732:32:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9582,"name":"address","nodeType":"ElementaryTypeName","src":"1732:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9583,"nodeType":"ArrayTypeName","src":"1732:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":9587,"mutability":"mutable","name":"poolFactoryNames","nameLocation":"1790:16:32","nodeType":"VariableDeclaration","scope":9686,"src":"1774:32:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":9585,"name":"string","nodeType":"ElementaryTypeName","src":"1774:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":9586,"nodeType":"ArrayTypeName","src":"1774:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":9590,"mutability":"mutable","name":"poolFactoryAddresses","nameLocation":"1833:20:32","nodeType":"VariableDeclaration","scope":9686,"src":"1816:37:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9588,"name":"address","nodeType":"ElementaryTypeName","src":"1816:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9589,"nodeType":"ArrayTypeName","src":"1816:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":9593,"mutability":"mutable","name":"aliasNames","nameLocation":"1879:10:32","nodeType":"VariableDeclaration","scope":9686,"src":"1863:26:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_string_memory_ptr_$dyn_memory_ptr","typeString":"string[]"},"typeName":{"baseType":{"id":9591,"name":"string","nodeType":"ElementaryTypeName","src":"1863:6:32","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"id":9592,"nodeType":"ArrayTypeName","src":"1863:8:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage_ptr","typeString":"string[]"}},"visibility":"internal"},{"constant":false,"id":9596,"mutability":"mutable","name":"aliasAddresses","nameLocation":"1916:14:32","nodeType":"VariableDeclaration","scope":9686,"src":"1899:31:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9594,"name":"address","nodeType":"ElementaryTypeName","src":"1899:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9595,"nodeType":"ArrayTypeName","src":"1899:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1602:334:32"},"returnParameters":{"id":9598,"nodeType":"ParameterList","parameters":[],"src":"1937:0:32"},"scope":9857,"src":"1591:1304:32","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9855,"nodeType":"Block","src":"2956:1797:32","statements":[{"condition":{"id":9689,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9548,"src":"3029:12:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9694,"nodeType":"IfStatement","src":"3025:70:32","trueBody":{"id":9693,"nodeType":"Block","src":"3043:52:32","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9690,"name":"AlreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9569,"src":"3064:18:32","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3064:20:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9692,"nodeType":"RevertStatement","src":"3057:27:32"}]}},{"expression":{"id":9697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9695,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9548,"src":"3105:12:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3120:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3105:19:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9698,"nodeType":"ExpressionStatement","src":"3105:19:32"},{"assignments":[9700],"declarations":[{"constant":false,"id":9700,"mutability":"mutable","name":"registerContractRole","nameLocation":"3211:20:32","nodeType":"VariableDeclaration","scope":9855,"src":"3203:28:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9699,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3203:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9712,"initialValue":{"arguments":[{"expression":{"expression":{"id":9708,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":235,"src":"3310:25:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBalancerContractRegistry_$235_$","typeString":"type(contract IBalancerContractRegistry)"}},"id":9709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3336:24:32","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":173,"src":"3310:50:32","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_enum$_ContractType_$66_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function IBalancerContractRegistry.registerBalancerContract(enum ContractType,string memory,address)"}},"id":9710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3361:8:32","memberName":"selector","nodeType":"MemberAccess","src":"3310:59:32","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9704,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9543,"src":"3258:24:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}],"id":9703,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3250:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9702,"name":"address","nodeType":"ElementaryTypeName","src":"3250:7:32","typeDescriptions":{}}},"id":9705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3250:33:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9701,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"3234:15:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3234:50:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3285:11:32","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"3234:62:32","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3234:145:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3203:176:32"},{"assignments":[9714],"declarations":[{"constant":false,"id":9714,"mutability":"mutable","name":"addAliasRole","nameLocation":"3397:12:32","nodeType":"VariableDeclaration","scope":9855,"src":"3389:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9713,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3389:7:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9726,"initialValue":{"arguments":[{"expression":{"expression":{"id":9722,"name":"IBalancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":235,"src":"3488:25:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBalancerContractRegistry_$235_$","typeString":"type(contract IBalancerContractRegistry)"}},"id":9723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3514:32:32","memberName":"addOrUpdateBalancerContractAlias","nodeType":"MemberAccess","referencedDeclaration":193,"src":"3488:58:32","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function IBalancerContractRegistry.addOrUpdateBalancerContractAlias(string memory,address)"}},"id":9724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3547:8:32","memberName":"selector","nodeType":"MemberAccess","src":"3488:67:32","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9718,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9543,"src":"3436:24:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}],"id":9717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3428:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9716,"name":"address","nodeType":"ElementaryTypeName","src":"3428:7:32","typeDescriptions":{}}},"id":9719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3428:33:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9715,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"3412:15:32","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3412:50:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3463:11:32","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"3412:62:32","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3412:153:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3389:176:32"},{"expression":{"arguments":[{"id":9730,"name":"registerContractRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9700,"src":"3598:20:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9733,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3628:4:32","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}],"id":9732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3620:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9731,"name":"address","nodeType":"ElementaryTypeName","src":"3620:7:32","typeDescriptions":{}}},"id":9734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3620:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9727,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"3576:11:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3588:9:32","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"3576:21:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3576:58:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9736,"nodeType":"ExpressionStatement","src":"3576:58:32"},{"expression":{"arguments":[{"id":9740,"name":"addAliasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9714,"src":"3666:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9743,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3688:4:32","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}],"id":9742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3680:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9741,"name":"address","nodeType":"ElementaryTypeName","src":"3680:7:32","typeDescriptions":{}}},"id":9744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3680:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9737,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"3644:11:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3656:9:32","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"3644:21:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3644:50:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9746,"nodeType":"ExpressionStatement","src":"3644:50:32"},{"body":{"id":9771,"nodeType":"Block","src":"3779:195:32","statements":[{"expression":{"arguments":[{"expression":{"id":9761,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"3860:12:32","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$66_$","typeString":"type(enum ContractType)"}},"id":9762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3873:6:32","memberName":"ROUTER","nodeType":"MemberAccess","referencedDeclaration":63,"src":"3860:19:32","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},{"baseExpression":{"id":9763,"name":"_routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"3897:12:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9765,"indexExpression":{"id":9764,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9748,"src":"3910:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3897:15:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":9766,"name":"_routerAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9554,"src":"3930:16:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9768,"indexExpression":{"id":9767,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9748,"src":"3947:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3930:19:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9758,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9543,"src":"3793:24:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}},"id":9760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3818:24:32","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":173,"src":"3793:49:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_enum$_ContractType_$66_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address) external"}},"id":9769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3793:170:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9770,"nodeType":"ExpressionStatement","src":"3793:170:32"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9751,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9748,"src":"3749:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9752,"name":"_routerNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"3753:12:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3766:6:32","memberName":"length","nodeType":"MemberAccess","src":"3753:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3749:23:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9772,"initializationExpression":{"assignments":[9748],"declarations":[{"constant":false,"id":9748,"mutability":"mutable","name":"i","nameLocation":"3742:1:32","nodeType":"VariableDeclaration","scope":9772,"src":"3734:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9747,"name":"uint256","nodeType":"ElementaryTypeName","src":"3734:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9750,"initialValue":{"hexValue":"30","id":9749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3746:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3734:13:32"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3774:3:32","subExpression":{"id":9755,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9748,"src":"3776:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9757,"nodeType":"ExpressionStatement","src":"3774:3:32"},"nodeType":"ForStatement","src":"3729:245:32"},{"body":{"id":9797,"nodeType":"Block","src":"4070:211:32","statements":[{"expression":{"arguments":[{"expression":{"id":9787,"name":"ContractType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":66,"src":"4151:12:32","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ContractType_$66_$","typeString":"type(enum ContractType)"}},"id":9788,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4164:12:32","memberName":"POOL_FACTORY","nodeType":"MemberAccess","referencedDeclaration":62,"src":"4151:25:32","typeDescriptions":{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"}},{"baseExpression":{"id":9789,"name":"_poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9557,"src":"4194:17:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9791,"indexExpression":{"id":9790,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9774,"src":"4212:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4194:20:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":9792,"name":"_poolFactoryAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9560,"src":"4232:21:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9794,"indexExpression":{"id":9793,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9774,"src":"4254:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4232:24:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_ContractType_$66","typeString":"enum ContractType"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9784,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9543,"src":"4084:24:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}},"id":9786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4109:24:32","memberName":"registerBalancerContract","nodeType":"MemberAccess","referencedDeclaration":173,"src":"4084:49:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_enum$_ContractType_$66_$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (enum ContractType,string memory,address) external"}},"id":9795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4084:186:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9796,"nodeType":"ExpressionStatement","src":"4084:186:32"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9777,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9774,"src":"4035:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9778,"name":"_poolFactoryNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9557,"src":"4039:17:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4057:6:32","memberName":"length","nodeType":"MemberAccess","src":"4039:24:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4035:28:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9798,"initializationExpression":{"assignments":[9774],"declarations":[{"constant":false,"id":9774,"mutability":"mutable","name":"i","nameLocation":"4028:1:32","nodeType":"VariableDeclaration","scope":9798,"src":"4020:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9773,"name":"uint256","nodeType":"ElementaryTypeName","src":"4020:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9776,"initialValue":{"hexValue":"30","id":9775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4032:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4020:13:32"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4065:3:32","subExpression":{"id":9781,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9774,"src":"4067:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9783,"nodeType":"ExpressionStatement","src":"4065:3:32"},"nodeType":"ForStatement","src":"4015:266:32"},{"body":{"id":9821,"nodeType":"Block","src":"4379:118:32","statements":[{"expression":{"arguments":[{"baseExpression":{"id":9813,"name":"_aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9563,"src":"4451:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9815,"indexExpression":{"id":9814,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9800,"src":"4463:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4451:14:32","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"baseExpression":{"id":9816,"name":"_aliasAddresses","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9566,"src":"4467:15:32","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":9818,"indexExpression":{"id":9817,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9800,"src":"4483:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4467:18:32","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9810,"name":"balancerContractRegistry","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9543,"src":"4393:24:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBalancerContractRegistry_$235","typeString":"contract IBalancerContractRegistry"}},"id":9812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4418:32:32","memberName":"addOrUpdateBalancerContractAlias","nodeType":"MemberAccess","referencedDeclaration":193,"src":"4393:57:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address) external"}},"id":9819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4393:93:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9820,"nodeType":"ExpressionStatement","src":"4393:93:32"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9803,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9800,"src":"4350:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9804,"name":"_aliasNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9563,"src":"4354:11:32","typeDescriptions":{"typeIdentifier":"t_array$_t_string_storage_$dyn_storage","typeString":"string storage ref[] storage ref"}},"id":9805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4366:6:32","memberName":"length","nodeType":"MemberAccess","src":"4354:18:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4350:22:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9822,"initializationExpression":{"assignments":[9800],"declarations":[{"constant":false,"id":9800,"mutability":"mutable","name":"i","nameLocation":"4343:1:32","nodeType":"VariableDeclaration","scope":9822,"src":"4335:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9799,"name":"uint256","nodeType":"ElementaryTypeName","src":"4335:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9802,"initialValue":{"hexValue":"30","id":9801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4347:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4335:13:32"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4374:3:32","subExpression":{"id":9807,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9800,"src":"4376:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9809,"nodeType":"ExpressionStatement","src":"4374:3:32"},"nodeType":"ForStatement","src":"4330:167:32"},{"expression":{"arguments":[{"id":9826,"name":"registerContractRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9700,"src":"4563:20:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9829,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4593:4:32","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}],"id":9828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4585:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9827,"name":"address","nodeType":"ElementaryTypeName","src":"4585:7:32","typeDescriptions":{}}},"id":9830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4585:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9823,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"4538:11:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4550:12:32","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"4538:24:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4538:61:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9832,"nodeType":"ExpressionStatement","src":"4538:61:32"},{"expression":{"arguments":[{"id":9836,"name":"addAliasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9714,"src":"4634:12:32","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9839,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4656:4:32","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}],"id":9838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4648:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9837,"name":"address","nodeType":"ElementaryTypeName","src":"4648:7:32","typeDescriptions":{}}},"id":9840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4648:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9833,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"4609:11:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4621:12:32","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"4609:24:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4609:53:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9842,"nodeType":"ExpressionStatement","src":"4609:53:32"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9846,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"4698:11:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4710:18:32","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":10,"src":"4698:30:32","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":9848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4698:32:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9851,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4740:4:32","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerContractRegistryInitializer_$9857","typeString":"contract BalancerContractRegistryInitializer"}],"id":9850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4732:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9849,"name":"address","nodeType":"ElementaryTypeName","src":"4732:7:32","typeDescriptions":{}}},"id":9852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4732:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9843,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9546,"src":"4673:11:32","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4685:12:32","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"4673:24:32","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4673:73:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9854,"nodeType":"ExpressionStatement","src":"4673:73:32"}]},"functionSelector":"bd968c18","id":9856,"implemented":true,"kind":"function","modifiers":[],"name":"initializeBalancerContractRegistry","nameLocation":"2910:34:32","nodeType":"FunctionDefinition","parameters":{"id":9687,"nodeType":"ParameterList","parameters":[],"src":"2944:2:32"},"returnParameters":{"id":9688,"nodeType":"ParameterList","parameters":[],"src":"2956:0:32"},"scope":9857,"src":"2901:1852:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":9858,"src":"807:3948:32","usedErrors":[2710,9569,9572],"usedEvents":[]}],"src":"46:4710:32"},"id":32},"contracts/ProtocolFeeControllerMigration.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeControllerMigration.sol","exportedSymbols":{"IAuthentication":[47],"IBasicAuthorizer":[32],"IProtocolFeeController":[791],"IVault":[829],"IVaultAdmin":[1119],"PoolConfig":[2323],"PoolRoleAccounts":[2395],"ProtocolFeeController":[6809],"ProtocolFeeControllerMigration":[10193],"ReentrancyGuardTransient":[4726],"SingletonAuthentication":[6868]},"id":10194,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9859,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:33"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":9861,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":48,"src":"72:116:33","symbolAliases":[{"foreign":{"id":9860,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","id":9863,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":33,"src":"189:114:33","symbolAliases":[{"foreign":{"id":9862,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"198:16:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":9865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":792,"src":"304:113:33","symbolAliases":[{"foreign":{"id":9864,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":791,"src":"313:22:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":9868,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":2590,"src":"418:107:33","symbolAliases":[{"foreign":{"id":9866,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2395,"src":"427:16:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":9867,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2323,"src":"445:10:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":9870,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":1120,"src":"526:91:33","symbolAliases":[{"foreign":{"id":9869,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1119,"src":"535:11:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9872,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":830,"src":"618:81:33","symbolAliases":[{"foreign":{"id":9871,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":829,"src":"627:6:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":9874,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":6869,"src":"701:104:33","symbolAliases":[{"foreign":{"id":9873,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"710:23:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":9876,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":6810,"src":"806:100:33","symbolAliases":[{"foreign":{"id":9875,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6809,"src":"815:21:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":9878,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10194,"sourceUnit":4727,"src":"907:132:33","symbolAliases":[{"foreign":{"id":9877,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4726,"src":"920:24:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9880,"name":"ReentrancyGuardTransient","nameLocations":["2325:24:33"],"nodeType":"IdentifierPath","referencedDeclaration":4726,"src":"2325:24:33"},"id":9881,"nodeType":"InheritanceSpecifier","src":"2325:24:33"},{"baseName":{"id":9882,"name":"SingletonAuthentication","nameLocations":["2351:23:33"],"nodeType":"IdentifierPath","referencedDeclaration":6868,"src":"2351:23:33"},"id":9883,"nodeType":"InheritanceSpecifier","src":"2351:23:33"}],"canonicalName":"ProtocolFeeControllerMigration","contractDependencies":[],"contractKind":"contract","documentation":{"id":9879,"nodeType":"StructuredDocumentation","src":"1041:1240:33","text":" @notice Migrate to a ProtocolFeeController with extra events and infrastructure for future migrations.\n @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n initially turned off).\n After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools\n are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible\n there might be too many to migrate in a single call.\n The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could\n be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator\n system of v2 just yet.\n When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the\n Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to\n prevent premature termination in case multiple transactions are required to migrate all the pools.\n Associated with `20250221-protocol-fee-controller-migration` (fork test only)."},"fullyImplemented":true,"id":10193,"linearizedBaseContracts":[10193,6868,5114,2669,47,4726],"name":"ProtocolFeeControllerMigration","nameLocation":"2291:30:33","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"7ea3a964","id":9886,"mutability":"immutable","name":"oldFeeController","nameLocation":"2421:16:33","nodeType":"VariableDeclaration","scope":10193,"src":"2381:56:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"},"typeName":{"id":9885,"nodeType":"UserDefinedTypeName","pathNode":{"id":9884,"name":"IProtocolFeeController","nameLocations":["2381:22:33"],"nodeType":"IdentifierPath","referencedDeclaration":791,"src":"2381:22:33"},"referencedDeclaration":791,"src":"2381:22:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"visibility":"public"},{"constant":false,"functionSelector":"51da116d","id":9889,"mutability":"mutable","name":"newFeeController","nameLocation":"2473:16:33","nodeType":"VariableDeclaration","scope":10193,"src":"2443:46:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"},"typeName":{"id":9888,"nodeType":"UserDefinedTypeName","pathNode":{"id":9887,"name":"IProtocolFeeController","nameLocations":["2443:22:33"],"nodeType":"IdentifierPath","referencedDeclaration":791,"src":"2443:22:33"},"referencedDeclaration":791,"src":"2443:22:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"visibility":"public"},{"constant":false,"functionSelector":"fbfa77cf","id":9892,"mutability":"immutable","name":"vault","nameLocation":"2520:5:33","nodeType":"VariableDeclaration","scope":10193,"src":"2496:29:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":9891,"nodeType":"UserDefinedTypeName","pathNode":{"id":9890,"name":"IVault","nameLocations":["2496:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"2496:6:33"},"referencedDeclaration":829,"src":"2496:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"public"},{"constant":false,"id":9895,"mutability":"immutable","name":"_authorizer","nameLocation":"2631:11:33","nodeType":"VariableDeclaration","scope":10193,"src":"2595:47:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"},"typeName":{"id":9894,"nodeType":"UserDefinedTypeName","pathNode":{"id":9893,"name":"IBasicAuthorizer","nameLocations":["2595:16:33"],"nodeType":"IdentifierPath","referencedDeclaration":32,"src":"2595:16:33"},"referencedDeclaration":32,"src":"2595:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"visibility":"internal"},{"constant":false,"id":9897,"mutability":"mutable","name":"_finalized","nameLocation":"2746:10:33","nodeType":"VariableDeclaration","scope":10193,"src":"2732:24:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9896,"name":"bool","nodeType":"ElementaryTypeName","src":"2732:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9899,"mutability":"mutable","name":"_globalPercentagesMigrated","nameLocation":"2878:26:33","nodeType":"VariableDeclaration","scope":10193,"src":"2864:40:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9898,"name":"bool","nodeType":"ElementaryTypeName","src":"2864:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"documentation":{"id":9900,"nodeType":"StructuredDocumentation","src":"2911:262:33","text":" @notice Attempt to deploy this contract with invalid parameters.\n @dev ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both\n the old and new controllers reference the same vault."},"errorSelector":"d6f1cb05","id":9902,"name":"InvalidFeeController","nameLocation":"3184:20:33","nodeType":"ErrorDefinition","parameters":{"id":9901,"nodeType":"ParameterList","parameters":[],"src":"3204:2:33"},"src":"3178:29:33"},{"documentation":{"id":9903,"nodeType":"StructuredDocumentation","src":"3213:49:33","text":"@notice Migration can only be performed once."},"errorSelector":"ca1c3cbc","id":9905,"name":"AlreadyMigrated","nameLocation":"3273:15:33","nodeType":"ErrorDefinition","parameters":{"id":9904,"nodeType":"ParameterList","parameters":[],"src":"3288:2:33"},"src":"3267:24:33"},{"body":{"id":9956,"nodeType":"Block","src":"3398:477:33","statements":[{"expression":{"id":9921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9917,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9886,"src":"3408:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9918,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9908,"src":"3427:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":9919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3434:24:33","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":2078,"src":"3427:31:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$791_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":9920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3427:33:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"src":"3408:52:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":9922,"nodeType":"ExpressionStatement","src":"3408:52:33"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"id":9927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9923,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9911,"src":"3593:17:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":9924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3611:5:33","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":597,"src":"3593:23:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$829_$","typeString":"function () view external returns (contract IVault)"}},"id":9925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3593:25:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":9926,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9908,"src":"3622:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"src":"3593:35:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"},"id":9930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9928,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9911,"src":"3632:17:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":9929,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9886,"src":"3653:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"src":"3632:37:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3593:76:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9936,"nodeType":"IfStatement","src":"3589:136:33","trueBody":{"id":9935,"nodeType":"Block","src":"3671:54:33","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9932,"name":"InvalidFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9902,"src":"3692:20:33","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3692:22:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9934,"nodeType":"RevertStatement","src":"3685:29:33"}]}},{"expression":{"id":9939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9937,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9892,"src":"3735:5:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9938,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9908,"src":"3743:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"src":"3735:14:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":9940,"nodeType":"ExpressionStatement","src":"3735:14:33"},{"expression":{"id":9943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9941,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"3759:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9942,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9911,"src":"3778:17:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"src":"3759:36:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":9944,"nodeType":"ExpressionStatement","src":"3759:36:33"},{"expression":{"id":9954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9945,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"3806:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9949,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9892,"src":"3845:5:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":9950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3851:13:33","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2143,"src":"3845:19:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$251_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":9951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3845:21:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAuthorizer_$251","typeString":"contract IAuthorizer"}],"id":9948,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3837:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9947,"name":"address","nodeType":"ElementaryTypeName","src":"3837:7:33","typeDescriptions":{}}},"id":9952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3837:30:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9946,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"3820:16:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasicAuthorizer_$32_$","typeString":"type(contract IBasicAuthorizer)"}},"id":9953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3820:48:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"src":"3806:62:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9955,"nodeType":"ExpressionStatement","src":"3806:62:33"}]},"id":9957,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9914,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9908,"src":"3390:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}}],"id":9915,"kind":"baseConstructorSpecifier","modifierName":{"id":9913,"name":"SingletonAuthentication","nameLocations":["3366:23:33"],"nodeType":"IdentifierPath","referencedDeclaration":6868,"src":"3366:23:33"},"nodeType":"ModifierInvocation","src":"3366:31:33"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9908,"mutability":"mutable","name":"_vault","nameLocation":"3316:6:33","nodeType":"VariableDeclaration","scope":9957,"src":"3309:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"},"typeName":{"id":9907,"nodeType":"UserDefinedTypeName","pathNode":{"id":9906,"name":"IVault","nameLocations":["3309:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":829,"src":"3309:6:33"},"referencedDeclaration":829,"src":"3309:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":9911,"mutability":"mutable","name":"_newFeeController","nameLocation":"3347:17:33","nodeType":"VariableDeclaration","scope":9957,"src":"3324:40:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"},"typeName":{"id":9910,"nodeType":"UserDefinedTypeName","pathNode":{"id":9909,"name":"IProtocolFeeController","nameLocations":["3324:22:33"],"nodeType":"IdentifierPath","referencedDeclaration":791,"src":"3324:22:33"},"referencedDeclaration":791,"src":"3324:22:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"3308:57:33"},"returnParameters":{"id":9916,"nodeType":"ParameterList","parameters":[],"src":"3398:0:33"},"scope":10193,"src":"3297:578:33","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9965,"nodeType":"Block","src":"4123:34:33","statements":[{"expression":{"id":9963,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9897,"src":"4140:10:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9962,"id":9964,"nodeType":"Return","src":"4133:17:33"}]},"documentation":{"id":9958,"nodeType":"StructuredDocumentation","src":"3881:179:33","text":" @notice Check whether migration has been completed.\n @dev It can only be done once.\n @return isComplete True if `finalizeMigration` has been called."},"functionSelector":"d7128084","id":9966,"implemented":true,"kind":"function","modifiers":[],"name":"isMigrationComplete","nameLocation":"4074:19:33","nodeType":"FunctionDefinition","parameters":{"id":9959,"nodeType":"ParameterList","parameters":[],"src":"4093:2:33"},"returnParameters":{"id":9962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9966,"src":"4117:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9960,"name":"bool","nodeType":"ElementaryTypeName","src":"4117:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4116:6:33"},"scope":10193,"src":"4065:92:33","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":10019,"nodeType":"Block","src":"4635:1023:33","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":9975,"name":"isMigrationComplete","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9966,"src":"4649:19:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":9976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4649:21:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9981,"nodeType":"IfStatement","src":"4645:76:33","trueBody":{"id":9980,"nodeType":"Block","src":"4672:49:33","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9977,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9905,"src":"4693:15:33","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4693:17:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9979,"nodeType":"RevertStatement","src":"4686:24:33"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9982,"name":"_globalPercentagesMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9899,"src":"4819:26:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":9983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4849:5:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4819:35:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9993,"nodeType":"IfStatement","src":"4815:141:33","trueBody":{"id":9992,"nodeType":"Block","src":"4856:100:33","statements":[{"expression":{"id":9987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9985,"name":"_globalPercentagesMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9899,"src":"4870:26:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4899:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4870:33:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9988,"nodeType":"ExpressionStatement","src":"4870:33:33"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9989,"name":"_migrateGlobalPercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10148,"src":"4918:25:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4918:27:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9991,"nodeType":"ExpressionStatement","src":"4918:27:33"}]}},{"body":{"id":10017,"nodeType":"Block","src":"5496:156:33","statements":[{"expression":{"arguments":[{"baseExpression":{"id":10012,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9970,"src":"5632:5:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":10014,"indexExpression":{"id":10013,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9995,"src":"5638:1:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5632:8:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":10008,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"5601:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}],"id":10007,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5593:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10006,"name":"address","nodeType":"ElementaryTypeName","src":"5593:7:33","typeDescriptions":{}}},"id":10009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5593:25:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10005,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6809,"src":"5571:21:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6809_$","typeString":"type(contract ProtocolFeeController)"}},"id":10010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5571:48:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6809","typeString":"contract ProtocolFeeController"}},"id":10011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5620:11:33","memberName":"migratePool","nodeType":"MemberAccess","referencedDeclaration":6192,"src":"5571:60:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":10015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5571:70:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10016,"nodeType":"ExpressionStatement","src":"5571:70:33"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9998,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9995,"src":"5473:1:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9999,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9970,"src":"5477:5:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":10000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5483:6:33","memberName":"length","nodeType":"MemberAccess","src":"5477:12:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5473:16:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10018,"initializationExpression":{"assignments":[9995],"declarations":[{"constant":false,"id":9995,"mutability":"mutable","name":"i","nameLocation":"5466:1:33","nodeType":"VariableDeclaration","scope":10018,"src":"5458:9:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9994,"name":"uint256","nodeType":"ElementaryTypeName","src":"5458:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9997,"initialValue":{"hexValue":"30","id":9996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5470:1:33","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5458:13:33"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":10003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5491:3:33","subExpression":{"id":10002,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9995,"src":"5493:1:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10004,"nodeType":"ExpressionStatement","src":"5491:3:33"},"nodeType":"ForStatement","src":"5453:199:33"}]},"documentation":{"id":9967,"nodeType":"StructuredDocumentation","src":"4163:391:33","text":" @notice Migrate pools from the old fee controller to the new one.\n @dev This can be called multiple times, if there are too many pools for a single transaction. Note that the\n first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\n @param pools The set of pools to be migrated in this call"},"functionSelector":"b8350e27","id":10020,"implemented":true,"kind":"function","modifiers":[{"id":9973,"kind":"modifierInvocation","modifierName":{"id":9972,"name":"nonReentrant","nameLocations":["4622:12:33"],"nodeType":"IdentifierPath","referencedDeclaration":4681,"src":"4622:12:33"},"nodeType":"ModifierInvocation","src":"4622:12:33"}],"name":"migratePools","nameLocation":"4568:12:33","nodeType":"FunctionDefinition","parameters":{"id":9971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9970,"mutability":"mutable","name":"pools","nameLocation":"4598:5:33","nodeType":"VariableDeclaration","scope":10020,"src":"4581:22:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9968,"name":"address","nodeType":"ElementaryTypeName","src":"4581:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9969,"nodeType":"ArrayTypeName","src":"4581:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4580:24:33"},"returnParameters":{"id":9974,"nodeType":"ParameterList","parameters":[],"src":"4635:0:33"},"scope":10193,"src":"4559:1099:33","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":10051,"nodeType":"Block","src":"5723:324:33","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":10025,"name":"isMigrationComplete","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9966,"src":"5737:19:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":10026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5737:21:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10031,"nodeType":"IfStatement","src":"5733:76:33","trueBody":{"id":10030,"nodeType":"Block","src":"5760:49:33","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10027,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9905,"src":"5781:15:33","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5781:17:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10029,"nodeType":"RevertStatement","src":"5774:24:33"}]}},{"expression":{"id":10034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10032,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9897,"src":"5819:10:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":10033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5832:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5819:17:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10035,"nodeType":"ExpressionStatement","src":"5819:17:33"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":10036,"name":"_migrateFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10192,"src":"5898:21:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":10037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5898:23:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10038,"nodeType":"ExpressionStatement","src":"5898:23:33"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10042,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"5992:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":10043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6004:18:33","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":10,"src":"5992:30:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":10044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5992:32:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":10047,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6034:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}],"id":10046,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6026:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10045,"name":"address","nodeType":"ElementaryTypeName","src":"6026:7:33","typeDescriptions":{}}},"id":10048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6026:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10039,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"5967:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":10041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5979:12:33","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"5967:24:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":10049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5967:73:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10050,"nodeType":"ExpressionStatement","src":"5967:73:33"}]},"functionSelector":"b78b6087","id":10052,"implemented":true,"kind":"function","modifiers":[{"id":10023,"kind":"modifierInvocation","modifierName":{"id":10022,"name":"authenticate","nameLocations":["5710:12:33"],"nodeType":"IdentifierPath","referencedDeclaration":2617,"src":"5710:12:33"},"nodeType":"ModifierInvocation","src":"5710:12:33"}],"name":"finalizeMigration","nameLocation":"5673:17:33","nodeType":"FunctionDefinition","parameters":{"id":10021,"nodeType":"ParameterList","parameters":[],"src":"5690:2:33"},"returnParameters":{"id":10024,"nodeType":"ParameterList","parameters":[],"src":"5723:0:33"},"scope":10193,"src":"5664:383:33","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":10147,"nodeType":"Block","src":"6099:1135:33","statements":[{"assignments":[10056],"declarations":[{"constant":false,"id":10056,"mutability":"mutable","name":"swapFeeRole","nameLocation":"6194:11:33","nodeType":"VariableDeclaration","scope":10147,"src":"6186:19:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10055,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6186:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":10068,"initialValue":{"arguments":[{"expression":{"expression":{"id":10064,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":791,"src":"6276:22:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$791_$","typeString":"type(contract IProtocolFeeController)"}},"id":10065,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6299:34:33","memberName":"setGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":719,"src":"6276:57:33","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_uint256_$returns$__$","typeString":"function IProtocolFeeController.setGlobalProtocolSwapFeePercentage(uint256)"}},"id":10066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6334:8:33","memberName":"selector","nodeType":"MemberAccess","src":"6276:66:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":10060,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"6232:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}],"id":10059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6224:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10058,"name":"address","nodeType":"ElementaryTypeName","src":"6224:7:33","typeDescriptions":{}}},"id":10061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6224:25:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10057,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"6208:15:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":10062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6208:42:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":10063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6251:11:33","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"6208:54:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":10067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6208:144:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6186:166:33"},{"assignments":[10070],"declarations":[{"constant":false,"id":10070,"mutability":"mutable","name":"yieldFeeRole","nameLocation":"6371:12:33","nodeType":"VariableDeclaration","scope":10147,"src":"6363:20:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10069,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6363:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":10082,"initialValue":{"arguments":[{"expression":{"expression":{"id":10078,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":791,"src":"6454:22:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$791_$","typeString":"type(contract IProtocolFeeController)"}},"id":10079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6477:35:33","memberName":"setGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":725,"src":"6454:58:33","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_uint256_$returns$__$","typeString":"function IProtocolFeeController.setGlobalProtocolYieldFeePercentage(uint256)"}},"id":10080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6513:8:33","memberName":"selector","nodeType":"MemberAccess","src":"6454:67:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":10074,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"6410:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}],"id":10073,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6402:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10072,"name":"address","nodeType":"ElementaryTypeName","src":"6402:7:33","typeDescriptions":{}}},"id":10075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:25:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10071,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"6386:15:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":10076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6386:42:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":10077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6429:11:33","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"6386:54:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":10081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6386:145:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6363:168:33"},{"expression":{"arguments":[{"id":10086,"name":"swapFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10056,"src":"6564:11:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":10089,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6585:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}],"id":10088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6577:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10087,"name":"address","nodeType":"ElementaryTypeName","src":"6577:7:33","typeDescriptions":{}}},"id":10090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6577:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10083,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"6542:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":10085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6554:9:33","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"6542:21:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":10091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6542:49:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10092,"nodeType":"ExpressionStatement","src":"6542:49:33"},{"expression":{"arguments":[{"id":10096,"name":"yieldFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10070,"src":"6623:12:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":10099,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6645:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}],"id":10098,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6637:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10097,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:33","typeDescriptions":{}}},"id":10100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6637:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10093,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"6601:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":10095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6613:9:33","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"6601:21:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":10101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6601:50:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10102,"nodeType":"ExpressionStatement","src":"6601:50:33"},{"assignments":[10104],"declarations":[{"constant":false,"id":10104,"mutability":"mutable","name":"globalSwapFeePercentage","nameLocation":"6717:23:33","nodeType":"VariableDeclaration","scope":10147,"src":"6709:31:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10103,"name":"uint256","nodeType":"ElementaryTypeName","src":"6709:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10108,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10105,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9886,"src":"6743:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":10106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6760:34:33","memberName":"getGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":609,"src":"6743:51:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":10107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6743:53:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6709:87:33"},{"assignments":[10110],"declarations":[{"constant":false,"id":10110,"mutability":"mutable","name":"globalYieldFeePercentage","nameLocation":"6814:24:33","nodeType":"VariableDeclaration","scope":10147,"src":"6806:32:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10109,"name":"uint256","nodeType":"ElementaryTypeName","src":"6806:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10114,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":10111,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9886,"src":"6841:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":10112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6858:35:33","memberName":"getGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":615,"src":"6841:52:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":10113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6841:54:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6806:89:33"},{"expression":{"arguments":[{"id":10118,"name":"globalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10104,"src":"6958:23:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10115,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"6906:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":10117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6923:34:33","memberName":"setGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":719,"src":"6906:51:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":10119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6906:76:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10120,"nodeType":"ExpressionStatement","src":"6906:76:33"},{"expression":{"arguments":[{"id":10124,"name":"globalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10110,"src":"7045:24:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10121,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"6992:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}},"id":10123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7009:35:33","memberName":"setGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":725,"src":"6992:52:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":10125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6992:78:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10126,"nodeType":"ExpressionStatement","src":"6992:78:33"},{"expression":{"arguments":[{"id":10130,"name":"swapFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10056,"src":"7137:11:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":10133,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7158:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}],"id":10132,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7150:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10131,"name":"address","nodeType":"ElementaryTypeName","src":"7150:7:33","typeDescriptions":{}}},"id":10134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7150:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10127,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"7112:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":10129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7124:12:33","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"7112:24:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":10135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7112:52:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10136,"nodeType":"ExpressionStatement","src":"7112:52:33"},{"expression":{"arguments":[{"id":10140,"name":"yieldFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10070,"src":"7199:12:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":10143,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7221:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}],"id":10142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7213:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10141,"name":"address","nodeType":"ElementaryTypeName","src":"7213:7:33","typeDescriptions":{}}},"id":10144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7213:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10137,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"7174:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":10139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7186:12:33","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"7174:24:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":10145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7174:53:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10146,"nodeType":"ExpressionStatement","src":"7174:53:33"}]},"id":10148,"implemented":true,"kind":"function","modifiers":[],"name":"_migrateGlobalPercentages","nameLocation":"6062:25:33","nodeType":"FunctionDefinition","parameters":{"id":10053,"nodeType":"ParameterList","parameters":[],"src":"6087:2:33"},"returnParameters":{"id":10054,"nodeType":"ParameterList","parameters":[],"src":"6099:0:33"},"scope":10193,"src":"6053:1181:33","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10191,"nodeType":"Block","src":"7282:360:33","statements":[{"assignments":[10152],"declarations":[{"constant":false,"id":10152,"mutability":"mutable","name":"setFeeControllerRole","nameLocation":"7300:20:33","nodeType":"VariableDeclaration","scope":10191,"src":"7292:28:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10151,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7292:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":10164,"initialValue":{"arguments":[{"expression":{"expression":{"id":10160,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1119,"src":"7380:11:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$1119_$","typeString":"type(contract IVaultAdmin)"}},"id":10161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7392:24:33","memberName":"setProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":980,"src":"7380:36:33","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IProtocolFeeController_$791_$returns$__$","typeString":"function IVaultAdmin.setProtocolFeeController(contract IProtocolFeeController)"}},"id":10162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7417:8:33","memberName":"selector","nodeType":"MemberAccess","src":"7380:45:33","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":10156,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9892,"src":"7347:5:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}],"id":10155,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7339:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10154,"name":"address","nodeType":"ElementaryTypeName","src":"7339:7:33","typeDescriptions":{}}},"id":10157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7339:14:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":10153,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"7323:15:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":10158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7323:31:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":10159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7355:11:33","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"7323:43:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":10163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7323:112:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7292:143:33"},{"expression":{"arguments":[{"id":10168,"name":"setFeeControllerRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10152,"src":"7468:20:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":10171,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7498:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}],"id":10170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7490:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10169,"name":"address","nodeType":"ElementaryTypeName","src":"7490:7:33","typeDescriptions":{}}},"id":10172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7490:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10165,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"7446:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":10167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7458:9:33","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"7446:21:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":10173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7446:58:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10174,"nodeType":"ExpressionStatement","src":"7446:58:33"},{"expression":{"arguments":[{"id":10178,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9889,"src":"7546:16:33","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$791","typeString":"contract IProtocolFeeController"}],"expression":{"id":10175,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9892,"src":"7515:5:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$829","typeString":"contract IVault"}},"id":10177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7521:24:33","memberName":"setProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":980,"src":"7515:30:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IProtocolFeeController_$791_$returns$__$","typeString":"function (contract IProtocolFeeController) external"}},"id":10179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7515:48:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10180,"nodeType":"ExpressionStatement","src":"7515:48:33"},{"expression":{"arguments":[{"id":10184,"name":"setFeeControllerRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10152,"src":"7599:20:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":10187,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7629:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$10193","typeString":"contract ProtocolFeeControllerMigration"}],"id":10186,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7621:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10185,"name":"address","nodeType":"ElementaryTypeName","src":"7621:7:33","typeDescriptions":{}}},"id":10188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7621:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10181,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9895,"src":"7574:11:33","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":10183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7586:12:33","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"7574:24:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":10189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7574:61:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10190,"nodeType":"ExpressionStatement","src":"7574:61:33"}]},"id":10192,"implemented":true,"kind":"function","modifiers":[],"name":"_migrateFeeController","nameLocation":"7249:21:33","nodeType":"FunctionDefinition","parameters":{"id":10149,"nodeType":"ParameterList","parameters":[],"src":"7270:2:33"},"returnParameters":{"id":10150,"nodeType":"ParameterList","parameters":[],"src":"7282:0:33"},"scope":10193,"src":"7240:402:33","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":10194,"src":"2282:5362:33","usedErrors":[38,4670,9902,9905],"usedEvents":[]}],"src":"46:7599:33"},"id":33}},"contracts":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"IBasicAuthorizer":{"abi":[{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","canPerform(bytes32,address,address)":"9be2a884","grantRole(bytes32,address)":"2f2ff15d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":\"IBasicAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol":{"IBalancerContractRegistry":{"abi":[{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAddressNotRegistered","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractAliasInUseAsName","type":"error"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAlreadyDeprecated","type":"error"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractNameInUseAsAlias","type":"error"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"ContractNameNotRegistered","type":"error"},{"inputs":[],"name":"InvalidContractAlias","type":"error"},{"inputs":[],"name":"InvalidContractName","type":"error"},{"inputs":[],"name":"ZeroContractAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeprecated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractDeregistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"indexed":true,"internalType":"string","name":"contractName","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BalancerContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"contractAlias","type":"string"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractAliasUpdated","type":"event"},{"inputs":[{"internalType":"string","name":"contractAlias","type":"string"},{"internalType":"address","name":"existingContract","type":"address"}],"name":"addOrUpdateBalancerContractAlias","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"deprecateBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"name":"deregisterBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"}],"name":"getBalancerContract","outputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"getBalancerContractInfo","outputs":[{"components":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IBalancerContractRegistry.ContractInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"isActiveBalancerContract","outputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"isTrustedRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ContractType","name":"contractType","type":"uint8"},{"internalType":"string","name":"contractName","type":"string"},{"internalType":"address","name":"contractAddress","type":"address"}],"name":"registerBalancerContract","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addOrUpdateBalancerContractAlias(string,address)":"2967af96","deprecateBalancerContract(address)":"44969a9c","deregisterBalancerContract(string)":"c7f90793","getBalancerContract(uint8,string)":"41d8c0bb","getBalancerContractInfo(address)":"8554c327","isActiveBalancerContract(uint8,address)":"ae2733a4","isTrustedRouter(address)":"264e97e0","registerBalancerContract(uint8,string,address)":"e0376ab4"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractAliasInUseAsName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAlreadyDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractNameInUseAsAlias\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"ContractNameNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractAlias\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidContractName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroContractAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"BalancerContractRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAliasUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractAlias\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"existingContract\",\"type\":\"address\"}],\"name\":\"addOrUpdateBalancerContractAlias\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"deprecateBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"deregisterBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getBalancerContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"getBalancerContractInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"internalType\":\"struct IBalancerContractRegistry.ContractInfo\",\"name\":\"info\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"isActiveBalancerContract\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"isTrustedRouter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"registerBalancerContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"details\":\"Both names and addresses must be unique in the primary registration mapping. Though there are two mappings to accommodate searching by either name or address, conceptually there is a single guaranteed-consistent name => address => state mapping.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractType\":\"The contract type, provided for documentation purposes\"}}],\"ContractAddressNotRegistered(address)\":[{\"details\":\"A contract being deprecated was never registered, or the target of an alias isn't a previously registered contract.\",\"params\":{\"contractAddress\":\"The address of the contract that was not registered\"}}],\"ContractAliasInUseAsName(uint8,string)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractName\":\"The name of the previously registered contract (and proposed alias)\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractAlreadyDeprecated(address)\":[{\"params\":{\"contractAddress\":\"The address of the previously deprecated contract\"}}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"details\":\"Note that names must be unique; it is not possible to register two contracts with the same name and different types, or the same name and different addresses.\",\"params\":{\"contractName\":\"The name of the previously registered contract\",\"contractType\":\"The registered contract type, provided for documentation purposes\"}}],\"ContractNameInUseAsAlias(string,address)\":[{\"details\":\"This could lead to inconsistent (or at least redundant) internal state if allowed.\",\"params\":{\"contractAddress\":\"The address of the previously registered contract\",\"contractName\":\"The name of the previously registered contract\"}}],\"ContractNameNotRegistered(string)\":[{\"params\":{\"contractName\":\"The name of the unregistered contract\"}}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"details\":\"This sets the `isActive` flag to false.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"BalancerContractDeregistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deregistered\",\"contractName\":\"The name of the contract being deregistered\",\"contractType\":\"The type of contract being deregistered\"}},\"BalancerContractRegistered(uint8,string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being registered\",\"contractName\":\"The name of the contract being registered\",\"contractType\":\"The type of contract being registered\"}},\"ContractAliasUpdated(string,address)\":{\"params\":{\"contractAddress\":\"The address of the contract being deprecated\",\"contractAlias\":\"The alias name\"}}},\"kind\":\"dev\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"details\":\"This is a permissioned function to support querying by a contract alias. For instance, we might create a `WeightedPool` alias meaning the \\\"latest\\\" version of the `WeightedPoolFactory`, so that off-chain users don't need to track specific versions. Once added, an alias can also be updated to point to a different address (e.g., when migrating from the v2 to the v3 weighted pool).\",\"params\":{\"contractAlias\":\"An alternate name that can be used to fetch a contract address\",\"existingContract\":\"The target address of the contract alias\"}},\"deprecateBalancerContract(address)\":{\"details\":\"This is a permissioned function that sets the `isActive` flag to false in the contract info. It uses the address instead of the name for maximum clarity, and to avoid having to handle aliases. Addresses and names are enforced unique, so either the name or address could be specified in principle.\",\"params\":{\"contractAddress\":\"The address of the contract being deprecated\"}},\"deregisterBalancerContract(string)\":{\"details\":\"This is a permissioned function, and makes it possible to correct errors without complex update logic. If a contract was registered with an incorrect type, name, or address, this allows governance to simply delete it, and register it again with the correct data. It must start with the name, as this is the registry key, required for complete deletion. Note that there might still be an alias targeting the address being deleted, but accessing it will just return inactive, and this orphan alias can simply be overwritten with `addOrUpdateBalancerContractAlias` to point to the correct address.\",\"params\":{\"contractName\":\"The name of the contract being deprecated (cannot be an alias)\"}},\"getBalancerContract(uint8,string)\":{\"details\":\"This could target a particular version (e.g. `20241205-v3-weighted-pool`), or a contract alias (e.g., `WeightedPool`).\",\"params\":{\"contractName\":\"The name of the contract\",\"contractType\":\"The type of the contract\"},\"returns\":{\"contractAddress\":\"The address of the associated contract, if registered, or zero\",\"isActive\":\"True if the contract was registered and not deprecated\"}},\"getBalancerContractInfo(address)\":{\"params\":{\"contractAddress\":\"The address of the associated contract\"},\"returns\":{\"info\":\"ContractInfo struct corresponding to the address\"}},\"isActiveBalancerContract(uint8,address)\":{\"params\":{\"contractAddress\":\"The address of the contract\",\"contractType\":\"The type of contract\"},\"returns\":{\"isActive\":\"True if the given address is a registered and active contract of the specified type\"}},\"registerBalancerContract(uint8,string,address)\":{\"details\":\"This is a permissioned function, and does only basic validation of the address (non-zero) and the name (not blank). Governance must ensure this is called with valid information. Emits the `BalancerContractRegistered` event if successful. Reverts if either the name or address is invalid or already in use.\",\"params\":{\"contractAddress\":\"The address of the contract\",\"contractName\":\"A text description of the contract, usually the deployed version (e.g., \\\"v3-pool-weighted\\\")\",\"contractType\":\"The type of contract being registered\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ContractAddressAlreadyRegistered(uint8,address)\":[{\"notice\":\"A contract has already been registered under the given address.\"}],\"ContractAddressNotRegistered(address)\":[{\"notice\":\"An operation that requires a valid contract specified an unrecognized address.\"}],\"ContractAliasInUseAsName(uint8,string)\":[{\"notice\":\"The proposed alias has already been registered as a contract.\"}],\"ContractAlreadyDeprecated(address)\":[{\"notice\":\"Contracts can only be deprecated once.\"}],\"ContractNameAlreadyRegistered(uint8,string)\":[{\"notice\":\"A contract has already been registered under the given name.\"}],\"ContractNameInUseAsAlias(string,address)\":[{\"notice\":\"The proposed contract name has already been added as an alias.\"}],\"ContractNameNotRegistered(string)\":[{\"notice\":\"Thrown when attempting to deregister a contract that was not previously registered.\"}],\"InvalidContractAlias()\":[{\"notice\":\"Cannot add an empty string as an alias.\"}],\"InvalidContractName()\":[{\"notice\":\"Cannot register (or deregister) a contract with an empty string as a name.\"}],\"ZeroContractAddress()\":[{\"notice\":\"Cannot register or deprecate contracts, or add an alias targeting the zero address.\"}]},\"events\":{\"BalancerContractDeprecated(address)\":{\"notice\":\"Emitted when a registered contract is deprecated.\"},\"BalancerContractDeregistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is deregistered (deleted).\"},\"BalancerContractRegistered(uint8,string,address)\":{\"notice\":\"Emitted when a new contract is registered.\"},\"ContractAliasUpdated(string,address)\":{\"notice\":\"Emitted when an alias is added or updated.\"}},\"kind\":\"user\",\"methods\":{\"addOrUpdateBalancerContractAlias(string,address)\":{\"notice\":\"Add an alias for a registered contract.\"},\"deprecateBalancerContract(address)\":{\"notice\":\"Deprecate an official Balancer contract.\"},\"deregisterBalancerContract(string)\":{\"notice\":\"Deregister an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"},\"getBalancerContract(uint8,string)\":{\"notice\":\"Look up a registered contract by type and name.\"},\"getBalancerContractInfo(address)\":{\"notice\":\"Look up complete information about a registered contract by address.\"},\"isActiveBalancerContract(uint8,address)\":{\"notice\":\"Determine whether an address is an official contract of the specified type.\"},\"isTrustedRouter(address)\":{\"notice\":\"Returns `true` if the given address is an active contract under the ROUTER type.\"},\"registerBalancerContract(uint8,string,address)\":{\"notice\":\"Register an official Balancer contract (e.g., a trusted router, standard pool factory, or hook).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":\"IBalancerContractRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:15:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:15:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:16:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:16:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:17:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:17:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:18:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:18:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:20:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:20:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"CommonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":\"CommonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0x2b001b0e402cb94f135c49e40cec96138e3842db5b2b1f46b1bb8d34abe1eecb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5d4336b62b3919e0fbd5e0f3ff2f29e1056c07b4c62c742797003733404416e2\",\"dweb:/ipfs/QmbQqFz4DPBcEEaHAV5HbB5aAQkSw4JZtck1fJCJrmbpw2\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"uint256","name":"initialGlobalSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"initialGlobalYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"fun_ensureValidPrecision":{"entryPoint":466,"id":6808,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60e0346101ba57601f612f7138819003918201601f19168301916001600160401b038311848410176101be578084926060946040528339810103126101ba578051906001600160a01b03821682036101ba576040602082015191015191306080528060a05260c0526706f05b59d3b20000908181116101ab576020816100a57fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936101d2565b805f55604051908152a1811161019c576020816100e27f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936101d2565b80600155604051908152a1604051612d5b9081610216823960805181612172015260a051818181610ed6015281816110fc015261283b015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db3015281816115d60152818161177b0152818161191c01528181611a7601528181611be401528181612350015281816126060152818161278201526129860152f35b6353c24f4760e11b5f5260045ffd5b637e6eb7fb60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b64174876e80080820481810291818304149015171561020157036101f257565b63419fd9e760e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127d6565b6706f05b59d3b200008211610327576101c482612a5b565b6101cd8161228e565b6101d68261246f565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612778565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612947565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612947565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e906124c1565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124de565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106938482546124b4565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f209182546124b4565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f209182546124b4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124f1565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b51851561071057610962906124c1565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124de565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d78482546124b4565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f209182546124b4565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f209182546124b4565b610aab906120ac565b8b6108ff565b50610abc83826124f1565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a91840161240e565b92602083015190811161032357610b21920161240e565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612532565b6126c1565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127d6565b610b9081612947565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612aa3565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127d6565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612aa3565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127d6565b6706f05b59d3b200008211610e6857610d2482612a5b565b610d2d8161228e565b610d368261246f565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123ef565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127d6565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a5b565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612947565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b61228e565b34610323576020806003193601126103235761106f611fda565b9061107982612947565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127d6565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a5b565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612778565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461246f565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561246f565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b6115128161228e565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361246f565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b67565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b68161228e565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361246f565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b35565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb816125c7565b906126c1565b34610323576040600319360112610323576118da611fda565b602435906118e781612532565b670de0ad9b58f1600082116119d1576118ff8161228e565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612532565b670de0ad9b58f1600082116119d157611a598161228e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124f1565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061246f565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061246f565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161207f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612300816120c0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857612380575050565b3d805f843e61238f81846120dc565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906123c682612254565b906123d460405192836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f8301121561032357815190602091612429816121ac565b9361243760405195866120dc565b81855260208086019260051b82010192831161032357602001905b828210612460575050505090565b81518152908301908301612452565b67ffffffffffffffff90818111612484571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b9061251e64174876e800928392612517670de0b6b3a764000091838303838510026124de565b04906124b4565b048181029181830414901517156106e35790565b6001600160a01b039081612545826125c7565b168015612586573303612556575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156126b7575f9161263e575b5001511690565b90506060813d6060116126af575b81612659606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f576126a5918491825261268c816125b3565b845261269a602082016125b3565b6020850152016125b3565b828201525f612637565b3d915061264c565b82513d5f823e3d90fd5b906126cb82612947565b92905f5b8481106126dd575050505050565b6001906001600160a01b03806126f38386612213565b5116818616805f5260086020818152604094855f20855f528252855f20549586612725575b50505050505050016126cf565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612764878d88612b99565b519586528a1694a45f808080808080612718565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036127aa57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6128027fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f92612925575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128ef575b5050156128c757565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d831161291e575b61290681836120dc565b81010312610323576129179061211d565b5f806128be565b503d6128fc565b606491925061294090843d8611610f3c57610f2d81836120dc565b919061286d565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f936129bd575b5050815190565b909192503d805f833e6129d081836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612a08816121ac565b94612a1660405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a43575050505050905f806129b6565b81518381168103610323578152908401908401612a2f565b64174876e8008082048181029181830414901517156106e35703612a7b57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612adc575b505050505050565b82612b21877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b99565b6040519687521694a45f8080808080612ad4565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124f1565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124f1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612c2d925f9283929190612bf66064886120dc565b1694519082865af13d15612c91573d90612c0f82612254565b91612c1d60405193846120dc565b82523d5f602084013e5b83612c99565b8051908115159182612c6e575b5050612c435750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612c89910161211d565b155f80612c3a565b606090612c27565b90612cd65750805115612cae57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612d1c575b612ce7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612cdf56fea2646970667358221220ac702bf6c267f2611555b40f68b78bf41368145a08eee05a8c562e82cb69e05564736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x1BA JUMPI PUSH1 0x1F PUSH2 0x2F71 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x1BE JUMPI DUP1 DUP5 SWAP3 PUSH1 0x60 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x1BA JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1BA JUMPI PUSH1 0x40 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 ADD MLOAD SWAP2 ADDRESS PUSH1 0x80 MSTORE DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH8 0x6F05B59D3B20000 SWAP1 DUP2 DUP2 GT PUSH2 0x1AB JUMPI PUSH1 0x20 DUP2 PUSH2 0xA5 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x1D2 JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 DUP2 GT PUSH2 0x19C JUMPI PUSH1 0x20 DUP2 PUSH2 0xE2 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x1D2 JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 PUSH1 0x40 MLOAD PUSH2 0x2D5B SWAP1 DUP2 PUSH2 0x216 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2172 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xED6 ADD MSTORE DUP2 DUP2 PUSH2 0x10FC ADD MSTORE PUSH2 0x283B ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x15D6 ADD MSTORE DUP2 DUP2 PUSH2 0x177B ADD MSTORE DUP2 DUP2 PUSH2 0x191C ADD MSTORE DUP2 DUP2 PUSH2 0x1A76 ADD MSTORE DUP2 DUP2 PUSH2 0x1BE4 ADD MSTORE DUP2 DUP2 PUSH2 0x2350 ADD MSTORE DUP2 DUP2 PUSH2 0x2606 ADD MSTORE DUP2 DUP2 PUSH2 0x2782 ADD MSTORE PUSH2 0x2986 ADD MSTORE RETURN JUMPDEST PUSH4 0x53C24F47 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x7E6EB7FB PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x201 JUMPI SUB PUSH2 0x1F2 JUMPI JUMP JUMPDEST PUSH4 0x419FD9E7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A5B JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2947 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2947 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24F1 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x26C1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2947 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2AA3 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27D6 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A5B JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23EF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A5B JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x228E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A5B JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x246F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x246F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x25C7 JUMP JUMPDEST SWAP1 PUSH2 0x26C1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24F1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2300 DUP2 PUSH2 0x20C0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x2380 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x238F DUP2 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x23C6 DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP1 PUSH2 0x23D4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2429 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2437 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2460 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2452 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2484 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x251E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2517 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24DE JUMP JUMPDEST DIV SWAP1 PUSH2 0x24B4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2545 DUP3 PUSH2 0x25C7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2586 JUMPI CALLER SUB PUSH2 0x2556 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x26B7 JUMPI PUSH0 SWAP2 PUSH2 0x263E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x26AF JUMPI JUMPDEST DUP2 PUSH2 0x2659 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x26A5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x268C DUP2 PUSH2 0x25B3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x269A PUSH1 0x20 DUP3 ADD PUSH2 0x25B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x25B3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2637 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x264C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x26CB DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26DD JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26F3 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2725 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x26CF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2764 DUP8 DUP14 DUP9 PUSH2 0x2B99 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2718 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x27AA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x2802 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x2925 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28EF JUMPI JUMPDEST POP POP ISZERO PUSH2 0x28C7 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x291E JUMPI JUMPDEST PUSH2 0x2906 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2917 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x28BE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28FC JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2940 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x286D JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x29BD JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x29D0 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2A08 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x2A16 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A43 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x29B6 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2A2F JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A7B JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2ADC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2B21 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2C2D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2BF6 PUSH1 0x64 DUP9 PUSH2 0x20DC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2C91 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2C0F DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP2 PUSH2 0x2C1D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2C99 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2C6E JUMPI JUMPDEST POP POP PUSH2 0x2C43 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2C89 SWAP2 ADD PUSH2 0x211D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST SWAP1 PUSH2 0x2CD6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2CAE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2D1C JUMPI JUMPDEST PUSH2 0x2CE7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2CDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAC PUSH17 0x2BF6C267F2611555B40F68B78BF4136814 GAS ADDMOD 0xEE 0xE0 GAS DUP13 JUMP 0x2E DUP3 0xCB PUSH10 0xE05564736F6C63430008 SHL STOP CALLER ","sourceMap":"3120:30799:22:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;-1:-1:-1;;;;;3120:30799:22;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:22;;;;;;;;;;;;;;922:4:23;;1347:46:14;;872:14:21;;;409::24;;4720:5:22;7248:55;;;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;-1:-1:-1;3120:30799:22;;;;;;25803:68;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;;1347:46:14;3120:30799:22;;;;;872:14:21;3120:30799:22;;;;;;;;;;;;;;;409:14:24;3120:30799:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7577:130;7661:35;;;-1:-1:-1;7661:35:22;;-1:-1:-1;7661:35:22;7244:127;7326:34;;;-1:-1:-1;7326:34:22;;-1:-1:-1;7326:34:22;3120:30799;-1:-1:-1;3120:30799:22;;;;;;-1:-1:-1;3120:30799:22;;;;;-1:-1:-1;3120:30799:22;33168:749;19669:4:13;;;;;;;;;;;;;;;;;;33769:74:22;33765:146;;33168:749::o;33765:146::-;33866:34;;;-1:-1:-1;33866:34:22;;-1:-1:-1;33866:34:22;19669:4:13;3120:30799:22;;;-1:-1:-1;19669:4:13;;;;;-1:-1:-1;19669:4:13"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8154,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_18784":{"entryPoint":8176,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9651,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9230,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8477,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":9199,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8490,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8232,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8644,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8620,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":8788,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9396,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9438,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_18915":{"entryPoint":9409,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":8198,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8412,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_18767":{"entryPoint":8291,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_18900":{"entryPoint":8364,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_43287":{"entryPoint":8384,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":10198,"id":2640,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8846,"id":5347,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9457,"id":5994,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9522,"id":6030,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10104,"id":6916,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10843,"id":6808,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8519,"id":2658,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":11061,"id":5964,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_18901":{"entryPoint":11111,"id":5964,"parameterSlots":1,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9671,"id":6073,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10567,"id":6054,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":11161,"id":7277,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9327,"id":8469,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":11417,"id":7729,"parameterSlots":3,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":9921,"id":6711,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10915,"id":6607,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8723,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"2598":[{"length":32,"start":8562}],"4951":[{"length":32,"start":3798},{"length":32,"start":4348},{"length":32,"start":10299}],"6878":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5590},{"length":32,"start":6011},{"length":32,"start":6428},{"length":32,"start":6774},{"length":32,"start":7140},{"length":32,"start":9040},{"length":32,"start":9734},{"length":32,"start":10114},{"length":32,"start":10630}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac6127d6565b6706f05b59d3b200008211610327576101c482612a5b565b6101cd8161228e565b6101d68261246f565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612778565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b61047287612947565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c784612947565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e906124c1565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124de565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106938482546124b4565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f209182546124b4565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f209182546124b4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124f1565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b51851561071057610962906124c1565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124de565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d78482546124b4565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f209182546124b4565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f209182546124b4565b610aab906120ac565b8b6108ff565b50610abc83826124f1565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a91840161240e565b92602083015190811161032357610b21920161240e565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612532565b6126c1565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b876127d6565b610b9081612947565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612aa3565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c436127d6565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612aa3565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c6127d6565b6706f05b59d3b200008211610e6857610d2482612a5b565b610d2d8161228e565b610d368261246f565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123ef565b9083610f0a565b503d610f23565b3461032357602060031936011261032357600435610f5f6127d6565b6706f05b59d3b200008111610e6857602081610f9b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f693612a5b565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc82612947565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b61228e565b34610323576020806003193601126103235761106f611fda565b9061107982612947565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103235760206003193601126103235760043561113c6127d6565b6706f05b59d3b200008111610327576020816111787fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d93612a5b565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612778565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461246f565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561246f565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b6115128161228e565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361246f565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b67565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b68161228e565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361246f565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b35565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb816125c7565b906126c1565b34610323576040600319360112610323576118da611fda565b602435906118e781612532565b670de0ad9b58f1600082116119d1576118ff8161228e565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612532565b670de0ad9b58f1600082116119d157611a598161228e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124f1565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061246f565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061246f565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161207f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612300816120c0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857612380575050565b3d805f843e61238f81846120dc565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906123c682612254565b906123d460405192836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f8301121561032357815190602091612429816121ac565b9361243760405195866120dc565b81855260208086019260051b82010192831161032357602001905b828210612460575050505090565b81518152908301908301612452565b67ffffffffffffffff90818111612484571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b9061251e64174876e800928392612517670de0b6b3a764000091838303838510026124de565b04906124b4565b048181029181830414901517156106e35790565b6001600160a01b039081612545826125c7565b168015612586573303612556575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156126b7575f9161263e575b5001511690565b90506060813d6060116126af575b81612659606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f576126a5918491825261268c816125b3565b845261269a602082016125b3565b6020850152016125b3565b828201525f612637565b3d915061264c565b82513d5f823e3d90fd5b906126cb82612947565b92905f5b8481106126dd575050505050565b6001906001600160a01b03806126f38386612213565b5116818616805f5260086020818152604094855f20855f528252855f20549586612725575b50505050505050016126cf565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612764878d88612b99565b519586528a1694a45f808080808080612718565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036127aa57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6128027fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f92612925575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f926128ef575b5050156128c757565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d831161291e575b61290681836120dc565b81010312610323576129179061211d565b5f806128be565b503d6128fc565b606491925061294090843d8611610f3c57610f2d81836120dc565b919061286d565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f936129bd575b5050815190565b909192503d805f833e6129d081836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612a08816121ac565b94612a1660405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a43575050505050905f806129b6565b81518381168103610323578152908401908401612a2f565b64174876e8008082048181029181830414901517156106e35703612a7b57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612adc575b505050505050565b82612b21877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b99565b6040519687521694a45f8080808080612ad4565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124f1565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124f1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612c2d925f9283929190612bf66064886120dc565b1694519082865af13d15612c91573d90612c0f82612254565b91612c1d60405193846120dc565b82523d5f602084013e5b83612c99565b8051908115159182612c6e575b5050612c435750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612c89910161211d565b155f80612c3a565b606090612c27565b90612cd65750805115612cae57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612d1c575b612ce7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612cdf56fea2646970667358221220ac702bf6c267f2611555b40f68b78bf41368145a08eee05a8c562e82cb69e05564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x2A5B JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x2947 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x2947 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24F1 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x26C1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x2947 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2AA3 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x27D6 JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x2A5B JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23EF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xF5F PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF9B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x2A5B JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x228E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x113C PUSH2 0x27D6 JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1178 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x2A5B JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x246F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x246F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x25C7 JUMP JUMPDEST SWAP1 PUSH2 0x26C1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24F1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2300 DUP2 PUSH2 0x20C0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x2380 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x238F DUP2 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x23C6 DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP1 PUSH2 0x23D4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2429 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2437 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2460 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2452 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2484 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x251E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2517 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24DE JUMP JUMPDEST DIV SWAP1 PUSH2 0x24B4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2545 DUP3 PUSH2 0x25C7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2586 JUMPI CALLER SUB PUSH2 0x2556 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x26B7 JUMPI PUSH0 SWAP2 PUSH2 0x263E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x26AF JUMPI JUMPDEST DUP2 PUSH2 0x2659 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x26A5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x268C DUP2 PUSH2 0x25B3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x269A PUSH1 0x20 DUP3 ADD PUSH2 0x25B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x25B3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2637 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x264C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x26CB DUP3 PUSH2 0x2947 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26DD JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26F3 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2725 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x26CF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2764 DUP8 DUP14 DUP9 PUSH2 0x2B99 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2718 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x27AA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x2802 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x2925 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x28EF JUMPI JUMPDEST POP POP ISZERO PUSH2 0x28C7 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x291E JUMPI JUMPDEST PUSH2 0x2906 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2917 SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x28BE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x28FC JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2940 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x286D JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x29BD JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x29D0 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2A08 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x2A16 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A43 JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x29B6 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2A2F JUMP JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x2A7B JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2ADC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2B21 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2C2D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2BF6 PUSH1 0x64 DUP9 PUSH2 0x20DC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2C91 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2C0F DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP2 PUSH2 0x2C1D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2C99 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2C6E JUMPI JUMPDEST POP POP PUSH2 0x2C43 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2C89 SWAP2 ADD PUSH2 0x211D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST SWAP1 PUSH2 0x2CD6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2CAE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2D1C JUMPI JUMPDEST PUSH2 0x2CE7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2CDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAC PUSH17 0x2BF6C267F2611555B40F68B78BF4136814 GAS ADDMOD 0xEE 0xE0 GAS DUP13 JUMP 0x2E DUP3 0xCB PUSH10 0xE05564736F6C63430008 SHL STOP CALLER ","sourceMap":"3120:30799:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:23;3120:30799:22;1424:26:23;;;3120:30799:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;;;1525:73:14;;;:::i;:::-;4720:5:22;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;31750:39;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;31707:129;;;3120:30799;26774:4;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;;;;;;31667:31;31707:129;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:22;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;-1:-1:-1;;31931:101:22;;;;;;;32048:68;31931:101;31707:129;31931:101;;;3120:30799;;;;;;;32048:68;3120:30799;31931:101;;;;:::i;:::-;3120:30799;31931:101;;;3120:30799;;;;;;;;;31931:101;3120:30799;;;7244:127;7326:34;3120:30799;7326:34;3120:30799;;7326:34;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;;;;-1:-1:-1;;;;;8671:6:22;3120:30799;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;436:67:24;;:::i;:::-;3120:30799:22;;;9345:33;;-1:-1:-1;;;;;3120:30799:22;;;9345:33;;3120:30799;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:22;3120:30799;9345:33;;;;;;;3120:30799;;;9345:33;;;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;;;;;;;;;;;;11336:30;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;;:57;;;;3120:30799;11566:199;;;3120:30799;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;11091:20;;-1:-1:-1;;;;;3120:30799:22;;;;11192:32;3120:30799;;;;;;;;11290:134;3120:30799;;11387:31;3120:30799;;;;;;11435:30;3120:30799;11499:28;;;:57;;;;11863:1939;11566:199;;;11863:1939;11825:28;;;:::i;:::-;11868:13;;3120:30799;11883:13;;;;;;3120:30799;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;11973:13;-1:-1:-1;;;;;11973:13:22;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:22;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;9345:6;;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:22;3120:30799;12005:50;;;;;;;;;;;11917:1875;3120:30799;;;12230:240;3120:30799;12437:13;;;;;;:::i;:::-;3120:30799;;;;;;12398:53;3120:30799;-1:-1:-1;;;;;3120:30799:22;;12398:53;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:17;;2000:58;;2153:5;;;:::i;:::-;3120:30799:22;465:4:17;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:22;-1:-1:-1;;;;;3120:30799:22;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:22;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;3120:30799;;;;;;;;;;2000:58:17;2033:14;3120:30799:22;2033:14:17;3120:30799:22;;2033:14:17;12488:1290:22;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;3120:30799::-;;;;;;;;;;12005:50;;;;:::i;:::-;3120:30799;;12005:50;;;;3120:30799;;;12005:50;3120:30799;;;;;;;;;12005:50;3120:30799;;;11566:199;11675:79;;;;;;:::i;:::-;11566:199;;;11499:57;11531:25;;;;-1:-1:-1;11499:57:22;;11898:3;11921:13;;;;:::i;:::-;3120:30799;11917:1875;;11898:3;3120:30799;;11868:13;;11917:1875;-1:-1:-1;;;;;11973:13:22;;;;:::i;:::-;3120:30799;;12041:13;;;;;:::i;:::-;3120:30799;-1:-1:-1;;;;;9345:6:22;3120:30799;12005:50;;;;3120:30799;;12005:50;3120:30799;12005:50;;;3120:30799;12005:50;;3120:30799;12034:4;3120:30799;;;;;;;;;9345:6;3120:30799;9345:6;;-1:-1:-1;;;;;9345:6:22;3120:30799;12005:50;;;;;;;;11917:1875;12332:13;;;12294:52;3120:30799;-1:-1:-1;;;;;12332:13:22;;;;:::i;:::-;3120:30799;;;;;;;;12294:52;;12488:1290;;;;13094:13;;;;:::i;:::-;3120:30799;2004:6:17;;2000:58;;2153:5;;;:::i;:::-;3120:30799:22;465:4:17;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30799:22;-1:-1:-1;;;;;3120:30799:22;;;;13254:19;3120:30799;;;;;;;;;;;;;13254:51;3120:30799;;;13254:51;:::i;:::-;3120:30799;;13366:13;;;;:::i;:::-;3120:30799;;;;;;;;;;;13327:70;3120:30799;-1:-1:-1;;;;;3120:30799:22;;;;13327:22;3120:30799;;;;;;;;;;;;;;;;;13327:70;:::i;:::-;3120:30799;;12488:1290;11917:1875;;;;12488:1290;3120:30799;;11499:28;;;13617:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;;13581:19;3120:30799;;;;;;;;;;13581:49;3120:30799;;;;;;13581:49;:::i;:::-;3120:30799;;12488:1290;;13520:240;13724:13;;;;:::i;:::-;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;;13685:22;3120:30799;;;;;;;;;;13685:52;3120:30799;;;;;;13685:52;:::i;12005:50::-;;;;:::i;:::-;;;;11566:199;11675:79;;;;;:::i;:::-;11566:199;;11499:57;11531:25;;;;-1:-1:-1;11499:57:22;;9345:33;;;;;;3120:30799;9345:33;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9345:33;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;30298:9;3120:30799;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;30298:9;:::i;:::-;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:14;;;:::i;:::-;29131:28:22;;;:::i;:::-;29175:13;3120:30799;29190:13;;;;;;3120:30799;29205:3;29239:13;29306:5;-1:-1:-1;;;;;29239:13:22;3120:30799;29239:13;;;:::i;:::-;3120:30799;;29306:5;;;:::i;:::-;3120:30799;29175:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;-1:-1:-1;;;;;3120:30799:22;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:30799:22;;;;;;;;;;1525:73:14;;;:::i;:::-;3120:30799:22;;;29588:52;;;;3120:30799;29588:52;;3120:30799;;;;29588:52;;3120:30799;;;;;29588:6;3120:30799;29588:52;;;;;;;;3120:30799;29689:5;;;;:::i;29588:52::-;3120:30799;29588:52;;3120:30799;29588:52;;;;;;3120:30799;29588:52;;;:::i;:::-;;;3120:30799;;;;29689:5;;-1:-1:-1;29588:52:22;;;;;-1:-1:-1;29588:52:22;;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;;;1525:73:14;;;:::i;:::-;4720:5:22;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;32783:40;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;32740:130;;;3120:30799;27118:4;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;;;;;;32699:32;32740:130;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:22;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;-1:-1:-1;;32966:103:22;;;;;;;33085:70;32966:103;32740:130;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;7577:130;7661:35;3120:30799;7661:35;3120:30799;;7661:35;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;;;;1424:26:23;;-1:-1:-1;;;;;1424:26:23;3120:30799:22;;;968:6:21;3120:30799:22;;1424:26:23;;;;;;;;;3120:30799:22;1424:26:23;;;3120:30799:22;;;;;;;;;1424:26:23;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3120:30799:22;;;;;-1:-1:-1;;3120:30799:22;;;;;;;1525:73:14;;:::i;:::-;4720:5:22;7581:57;;7577:130;;3120:30799;7738:21;;26371:70;7738:21;;:::i;:::-;3120:30799;;;;;;;;26371:70;3120:30799;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;15924:28;;;;:::i;:::-;15976:24;;;;:::i;:::-;16015:13;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;16010:124;16030:13;;;;;;3120:30799;;;;;;;:::i;:::-;;;;16045:3;3120:30799;;;;;16080:22;3120:30799;;;;;16109:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;16064:59;;;;:::i;:::-;3120:30799;;16015:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;15502:28;;;;:::i;:::-;15554:24;;;;:::i;:::-;15593:13;3120:30799;;-1:-1:-1;;;;;3120:30799:22;;;15588:121;15608:13;;;;;;3120:30799;;;;;;;:::i;15623:3::-;3120:30799;;;;;15658:19;3120:30799;;;;;15684:13;;;;;:::i;:::-;3120:30799;;;;;;;;;;15642:56;;;;:::i;:::-;3120:30799;;15593:13;;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;;;;-1:-1:-1;;;;;968:6:21;3120:30799:22;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;1525:73:14;;:::i;:::-;4720:5:22;7248:55;;7244:127;;3120:30799;7402:20;;25803:68;7402:20;;:::i;:::-;3120:30799;;;;;;;;25803:68;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;-1:-1:-1;;;;;3120:30799:22;;:::i;:::-;;;;14798:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;436:67:24;;:::i;:::-;-1:-1:-1;;;;;3120:30799:22;;;;;;;;;;;;;;;;23815:4;3120:30799;;;;;;;23948:56;;;;;;3120:30799;23948:56;;;;24044:57;;;;;;;;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;24632:37;;;:::i;:::-;3120:30799;;;;;;:::i;:::-;;;;;;;24733:32;24817:38;24589:134;;;3120:30799;;;;;;;24549:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24817:38;:::i;:::-;3120:30799;;;;;;;;;:::i;:::-;;;;24774:135;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25031:90;3120:30799;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;25031:90;;;;3120:30799;;;;;;;;;;;;;;;;;;;;25136:92;;;;3120:30799;;;;;;25244:69;;3120:30799;;;;;;;;;24044:57;3120:30799;;;;23815:4;3120:30799;24044:57;25031:90;3120:30799;24044:57;25244:69;24044:57;;;25136:92;24044:57;25136:92;24044:57;;;23948:56;3120:30799;;;23948:56;;;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:22;;;;;;;;16627:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16753:81;;;;3120:30799;16749:176;;;3120:30799;16749:176;31750:39;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;31707:129;;;3120:30799;;;;;;;16627:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;31931:6;3120:30799;31977:54;;;;:::i;:::-;31931:101;;;;;3120:30799;;;31931:101;;-1:-1:-1;;;;;3120:30799:22;;;;;31931:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;-1:-1:-1;;31931:101:22;;;;;;;32048:68;31931:101;;;3120:30799;;;;;;32048:68;3120:30799;16753:81;16786:48;;;;;16753:81;;;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:22;;;;;;;;17109:32;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;17190:33;3120:30799;17238:82;;;;3120:30799;17234:179;;;3120:30799;17234:179;32783:40;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;32740:130;;;3120:30799;;;;;;;17109:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;32966:6;3120:30799;33013:55;;;;:::i;:::-;32966:103;;;;;3120:30799;;;32966:103;;-1:-1:-1;;;;;3120:30799:22;;;;;32966:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;-1:-1:-1;;32966:103:22;;;;;;;33085:70;32966:103;;;3120:30799;;;;;;33085:70;3120:30799;17238:82;17271:49;;;;;17238:82;;;3120:30799;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:22;;;;;-1:-1:-1;;;;;3120:30799:22;;:::i;:::-;;;;14517:31;3120:30799;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:30799:22;;;;;;14136:33;3120:30799;;;;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;30461:21;3120:30799;;:::i;:::-;30461:21;;;:::i;:::-;;;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:22;;;;;;;;28563:31;3120:30799;;;;;;;28729:6;3120:30799;28776:55;;;;:::i;:::-;28729:103;;;;;3120:30799;;;28729:103;;-1:-1:-1;;;;;3120:30799:22;;;;;28729:103;;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;-1:-1:-1;;28729:103:22;;;;;;;28852:68;28729:103;3120:30799;28729:103;;;3120:30799;;;;;;28852:68;3120:30799;7864:127;7947:33;3120:30799;7947:33;3120:30799;;7947:33;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;;;;4975:9;3120:30799;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30799:22;;;;;;;;28180:30;3120:30799;;;;;;;28344:6;3120:30799;28390:54;;;;:::i;:::-;28344:101;;;;;3120:30799;;;28344:101;;-1:-1:-1;;;;;3120:30799:22;;;;;28344:101;;3120:30799;;;;;;-1:-1:-1;;3120:30799:22;;;;;;-1:-1:-1;;28344:101:22;;;;;;;28465:67;28344:101;3120:30799;28344:101;;;3120:30799;;;;;;28465:67;3120:30799;28344:101;;;;:::i;:::-;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;;16364:79;3120:30799;;;;16364:79;:::i;3120:30799::-;;;;;-1:-1:-1;;3120:30799:22;;;;;-1:-1:-1;;;;;3120:30799:22;;:::i;:::-;;;;15055:30;3120:30799;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30799:22;;;;;;;:::i;:::-;;-1:-1:-1;;;;;3120:30799:22;;;21277:33;;:6;;3120:30799;21277:6;;;3120:30799;21277:33;;;;;;;;3120:30799;21277:33;;;3120:30799;;;21362:4;;21325:42;;21321:104;;3120:30799;;;;;;;;;;;;;;21435:87;;3120:30799;;;;;;;;;21557:4;3120:30799;;;;;;;;;;21634:49;;;3120:30799;21634:49;;3120:30799;;21634:49;3120:30799;21634:49;;;;;;;;;3120:30799;;;21634:49;;;3120:30799;21776:36;;;;:::i;:::-;3120:30799;;;;;;;:::i;:::-;;;;;;;21733:133;;;3120:30799;;;;;;;;21693:31;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21941:72;3120:30799;21941:72;;;3120:30799;21941:72;;3120:30799;;21941:72;3120:30799;21941:72;;;;;;;;;3120:30799;;;21941:72;;;3120:30799;22107:37;;;;:::i;:::-;3120:30799;;;;;;;;:::i;:::-;;;;22064:135;;;3120:30799;;;;;;;;22023:32;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;22731:54;;;3120:30799;22731:54;;3120:30799;22731:54;;3120:30799;22731:54;;;;3120:30799;;22731:54;;;3120:30799;22727:277;;;;3120:30799;22727:277;;;3120:30799;;;;23018:55;;;;3120:30799;23018:55;;;3120:30799;23018:55;;3120:30799;23018:55;;3120:30799;;23018:55;;;3120:30799;23014:281;;;3120:30799;23014:281;23136:31;3120:30799;;;;;;;;;;;23018:55;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;23018:55;;;;;;;;;22727:277;3120:30799;;;22847:30;3120:30799;;;;;;22727:277;;;22731:54;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;22731:54;;3120:30799;22731:54;;;;;;;21941:72;22107:37;21941:72;;;;;3120:30799;21941:72;3120:30799;21941:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;21634:49;21776:36;21634:49;;;;;3120:30799;21634:49;3120:30799;21634:49;;;;;;;:::i;:::-;;;;21435:87;21484:27;;3120:30799;21484:27;3120:30799;;;;21484:27;21321:104;21390:24;3120:30799;21390:24;3120:30799;;21390:24;21277:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;21277:33;;;;;;;;;;3120:30799;;;;;-1:-1:-1;;3120:30799:22;;;;;;;-1:-1:-1;;;;;3120:30799:22;;:::i;:::-;;;;15252:31;3120:30799;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30799:22;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:30799:22;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:30799:22;;;;;;;;4720:5;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:14:-;3120:30799:22;;;2303:50:14;;;2320:22;;3120:30799:22;;;;;;;2303:50:14;;;;;;:::i;:::-;3120:30799:22;2293:61:14;;1931:430;:::o;3120:30799:22:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;8733:151::-;8808:68;8733:151;-1:-1:-1;3120:30799:22;-1:-1:-1;;;;;3120:30799:22;;8808:68;;3120:30799;8808:68;;;;;;;;;;3120:30799;8808:68;;;3120:30799;8808:68;;;;;;:::i;:::-;3120:30799;;8794:83;;;;;;;3120:30799;8794:83;;;8808:68;8794:83;;3120:30799;;;;;8808:68;3120:30799;;;;;;;;;;;;;;;;;;8794:83;;:6;;3120:30799;8794:83;;;;;;;;8733:151;;:::o;8794:83::-;;;-1:-1:-1;8794:83:22;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:30799:22;;;;;;;;;8733:151::o;3120:30799::-;;;;;;;;;;-1:-1:-1;;;;;3120:30799:22;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;13291:213:31;3120:30799:22;13369:24:31;;;;13365:103;;3120:30799:22;13291:213:31;:::o;13365:103::-;13416:41;;;13447:2;13416:41;3120:30799:22;;;;13416:41:31;;3120:30799:22;;;;;;;;;;:::o;19669:4:13:-;;465::17;19669::13;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;18132:1064:22:-;;18361:104;19669:4:13;5832:87:17;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:13;18361:104:22;;:::i;:::-;19669:4:13;;;;;;;;;;;;;;;18132:1064:22;:::o;19202:340::-;-1:-1:-1;;;;;19298:21:22;;;;;:::i;:::-;3120:30799;19334:25;;19330:93;;19452:10;19437:25;19433:103;;19202:340;;:::o;19433:103::-;19485:40;19357:1;19485:40;19452:10;19485:40;3120:30799;;;;;19357:1;19485:40;19330:93;19382:30;;19357:1;19382:30;3120:30799;19382:30;3120:30799;;19357:1;19382:30;3120:30799;;;-1:-1:-1;;;;;3120:30799:22;;;;;;:::o;19813:201::-;3120:30799;;;;19933:32;;-1:-1:-1;;;;;3120:30799:22;;;19933:32;;;3120:30799;19933:32;3120:30799;;;19933:6;3120:30799;;19933:32;;;;;;;-1:-1:-1;19933:32:22;;;19813:201;19983:24;;3120:30799;;19813:201;:::o;19933:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;19933:32;3120:30799;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19933:32;;;;;;-1:-1:-1;19933:32:22;;;3120:30799;;;-1:-1:-1;3120:30799:22;;;;;30496:616;;30631:28;;;:::i;:::-;30675:13;;30687:1;30690:13;;;;;;30496:616;;;;;:::o;30705:3::-;3120:30799;;-1:-1:-1;;;;;30739:13:22;;;;;:::i;:::-;3120:30799;;;;;;30687:1;3120:30799;30794:22;3120:30799;;;;;;;30687:1;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30847:20;;30843:253;;30705:3;;;;;;;;3120:30799;30675:13;;30843:253;31015:66;3120:30799;;30687:1;3120:30799;;;;30687:1;3120:30799;;30687:1;3120:30799;;;30687:1;3120:30799;;;;30974:16;;;;;:::i;:::-;3120:30799;;;;;;31015:66;;30843:253;;;;;;;;;509:165:24;-1:-1:-1;;;;;586:6:24;3120:30799:22;564:10:24;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:30799:22;;616:41:24;;1688:201:14;1762:20;1774:7;;;;1762:20;:::i;:::-;-1:-1:-1;;;;;3120:30799:22;;;1180:22:21;;;:6;;;:22;:6;;;3120:30799:22;1180:22:21;;;;;;;;;1774:7:14;1180:22:21;;;1688:201:14;3120:30799:22;;;;;1180:64:21;;;;;3120:30799:22;1180:64:21;;:22;:64;;3120:30799:22;1820:10:14;3120:30799:22;;;;1238:4:21;3120:30799:22;;;;;1180:64:21;;;;;;;1774:7:14;1180:64:21;;;1688:201:14;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1180:22:21;1774:7:14;1854:18;1180:64:21;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30799:22;;;;;;;:::i;:::-;1180:64:21;;;;;;;;;:22;3120:30799:22;1180:22:21;;;;;;;;;;;;;;;:::i;:::-;;;;;19548:199:22;;-1:-1:-1;;;;;3120:30799:22;;;19679:26;3120:30799;19679:26;;3120:30799;19679:26;;;3120:30799;19679:26;:6;3120:30799;19679:6;;;3120:30799;19679:26;;;;;;;;;;;19548:199;19670:35;;;3120:30799;19548:199;:::o;19679:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:30799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19679:26;;;;;;;;;;3120:30799;;;;;;;;;;;;;;;;;;;;33168:749;19669:4:13;;;;;;;;;;;;;;;;;;33769:74:22;33765:146;;33168:749::o;33765:146::-;33866:34;-1:-1:-1;33866:34:22;;-1:-1:-1;33866:34:22;29708:403;;;-1:-1:-1;;;;;3120:30799:22;;;;;-1:-1:-1;3120:30799:22;29832:19;3120:30799;;;-1:-1:-1;3120:30799:22;;;;;;;-1:-1:-1;3120:30799:22;;;;-1:-1:-1;3120:30799:22;;29878:20;;29874:231;;29708:403;;;;;;;:::o;29874:231::-;3120:30799;29994:16;3120:30799;30031:63;3120:30799;;;;-1:-1:-1;3120:30799:22;29832:19;3120:30799;;;-1:-1:-1;3120:30799:22;;-1:-1:-1;3120:30799:22;;;-1:-1:-1;3120:30799:22;;;;29994:16;:::i;:::-;3120:30799;;;;;;30031:63;;29874:231;;;;;;;;17425:701;-1:-1:-1;;;;;3120:30799:22;17624:399;3120:30799;17882:32;3120:30799;;18040:79;3120:30799;;17624:399;3120:30799;;;17975:31;3120:30799;;;17624:399;3120:30799;;18040:79;;:::i;17425:701::-;-1:-1:-1;;;;;3120:30799:22;-1:-1:-1;3120:30799:22;;;;18040:79;3120:30799;;-1:-1:-1;3120:30799:22;;;17791:30;3120:30799;;;-1:-1:-1;3120:30799:22;;18040:79;;:::i;1303:160:29:-;3120:30799:22;;;1412:43:29;;;;;;-1:-1:-1;;;;;3120:30799:22;;;1412:43:29;;;3120:30799:22;;;;;;;;;1412:43:29;;;3120:30799:22;3510:55:30;;-1:-1:-1;;;;1412:43:29;3120:30799:22;1412:43:29;3120:30799:22;;1412:43:29;:::i;:::-;3120:30799:22;3462:31:30;;;;;;;3120:30799:22;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2847:1:30;1412:43:29;3120:30799:22;;;;3510:55:30;;:::i;:::-;3120:30799:22;;4551:22:29;;;;:57;;;;3120:30799:22;4547:135:29;;;;1303:160;:::o;4547:135::-;4631:40;2847:1:30;4631:40:29;;3120:30799:22;1412:43:29;2847:1:30;4631:40:29;4551:57;4578:30;;;;1412:43;4578:30;;;3120:30799:22;;;;1412:43:29;3120:30799:22;4578:30:29;;3120:30799:22;:::i;:::-;4577:31:29;4551:57;;;;3120:30799:22;;;;;4625:582:30;;4797:8;;-1:-1:-1;3120:30799:22;;5874:21:30;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;3120:30799:22;;5045:22:30;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:30;;5066:1;5121:24;3120:30799:22;5121:24:30;3120:30799:22;;5066:1:30;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialGlobalYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0x2b001b0e402cb94f135c49e40cec96138e3842db5b2b1f46b1bb8d34abe1eecb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5d4336b62b3919e0fbd5e0f3ff2f29e1056c07b4c62c742797003733404416e2\",\"dweb:/ipfs/QmbQqFz4DPBcEEaHAV5HbB5aAQkSw4JZtck1fJCJrmbpw2\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0x2b001b0e402cb94f135c49e40cec96138e3842db5b2b1f46b1bb8d34abe1eecb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5d4336b62b3919e0fbd5e0f3ff2f29e1056c07b4c62c742797003733404416e2\",\"dweb:/ipfs/QmbQqFz4DPBcEEaHAV5HbB5aAQkSw4JZtck1fJCJrmbpw2\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212205eb38cb825d4eb9173120381e173db99b9a726aee63c8bf1b9ab18ca0b07c5c964736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MCOPY 0xB3 DUP13 0xB8 0x25 0xD4 0xEB SWAP2 PUSH20 0x120381E173DB99B9A726AEE63C8BF1B9AB18CA0B SMOD 0xC5 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:24:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:24;;;;-1:-1:-1;;;;;308:368:24;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:24;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:24;;;;;;-1:-1:-1;308:368:24;;;;;-1:-1:-1;308:368:24"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212205eb38cb825d4eb9173120381e173db99b9a726aee63c8bf1b9ab18ca0b07c5c964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MCOPY 0xB3 DUP13 0xB8 0x25 0xD4 0xEB SWAP2 PUSH20 0x120381E173DB99B9A726AEE63C8BF1B9AB18CA0B SMOD 0xC5 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:24:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"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\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"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\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"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\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} doThing(..., value); } function doThing(..., uint256 value) public { token.safeTransferFrom(msg.sender, address(this), value); ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:29:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:29:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:30:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:30:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:31:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:31:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"contracts/BalancerContractRegistryInitializer.sol":{"BalancerContractRegistryInitializer":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IBalancerContractRegistry","name":"balancerContractRegistry_","type":"address"},{"internalType":"string[]","name":"routerNames","type":"string[]"},{"internalType":"address[]","name":"routerAddresses","type":"address[]"},{"internalType":"string[]","name":"poolFactoryNames","type":"string[]"},{"internalType":"address[]","name":"poolFactoryAddresses","type":"address[]"},{"internalType":"string[]","name":"aliasNames","type":"string[]"},{"internalType":"address[]","name":"aliasAddresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"VaultMismatch","type":"error"},{"inputs":[],"name":"balancerContractRegistry","outputs":[{"internalType":"contract IBalancerContractRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initializeBalancerContractRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_array_address_dyn_fromMemory":{"entryPoint":2720,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_string_dyn_fromMemory":{"entryPoint":2523,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IVault_fromMemory":{"entryPoint":2480,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_string_dyn":{"entryPoint":2500,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_bytes1":{"entryPoint":2889,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":2833,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2445,"id":null,"parameterSlots":2,"returnSlots":0},"fun_ensureInputLengthMatch":{"entryPoint":2911,"id":2735,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"60c080604052346103ce576115de803803809161001c828561098d565b8339810190610100818303126103ce57610035816109b0565b6020820151909290916001600160a01b03831683036103ce5760408101516001600160401b0381116103ce578261006d9183016109db565b60608201519093906001600160401b0381116103ce578361008f918401610aa0565b60808301516001600160401b0381116103ce57846100ae9185016109db565b60a08401519092906001600160401b0381116103ce57856100d0918601610aa0565b60c08501519094906001600160401b0381116103ce57866100f29183016109db565b60e08201519096906001600160401b0381116103ce576101129201610aa0565b956001549161012360025484610b5f565b61013260035460045490610b5f565b61014160055460065490610b5f565b6040516311b2515f60e31b81526020816004816001600160a01b0386165afa9081156103da575f91610953575b506001600160a01b038a81169116036109445760805280519168010000000000000000831161041e57826001558083106108c7575b5060015f9081525f5160206115be5f395f51905f5292916020015b8282106107c05750508251929150506001600160401b03821161041e5768010000000000000000821161041e57602090600254836002558084106107a4575b500160025f5260205f205f5b838110610787575050505080519068010000000000000000821161041e576003548260035580831061070b575b5060035f9081525f51602061159e5f395f51905f5292916020015b8282106106045750508251929150506001600160401b03821161041e5768010000000000000000821161041e57602090600454836004558084106105e8575b500160045f5260205f205f5b8381106105cb575050505080519068010000000000000000821161041e576005548260055580831061054f575b5060055f9081525f51602061157e5f395f51905f5292916020015b8282106104325784518690866001600160401b03821161041e5768010000000000000000821161041e5760209060065483600655808410610402575b500160065f5260205f205f5b8381106103e55760405163aaabadc560e01b81526020816004816001600160a01b038a165afa9081156103da575f91610394575b506001600160a01b031660a052604051610a089081610b76823960805181818160b3015261083e015260a051816101830152f35b90506020813d6020116103d2575b816103af6020938361098d565b810103126103ce57516001600160a01b03811681036103ce5781610360565b5f80fd5b3d91506103a2565b6040513d5f823e3d90fd5b82516001600160a01b03168183015560209092019160010161032c565b6104189060065f5284845f209182019101610b49565b84610320565b634e487b7160e01b5f52604160045260245ffd5b80518051906001600160401b03821161041e5761044f8654610b11565b90601f91828111610517575b5060209183116001146104ab5792610491836001959460209487965f926104a0575b50508160011b915f199060031b1c19161790565b87555b019401910190926102e4565b015190505f8061047d565b90865f5260205f20915f5b601f19851681106104ff575083602093600196938796938794601f198116106104e7575b505050811b018755610494565b01515f1960f88460031b161c191690555f80806104da565b919260206001819286850151815501940192016104b6565b61054090885f5260205f208480870160051c82019260208810610546575b0160051c0190610b49565b5f61045b565b92508192610535565b60055f525f51602061157e5f395f51905f529081019083015b81811061057557506102c9565b8061058260019254610b11565b8061058f575b5001610568565b601f9081811184146105a75750505f81555b5f610588565b6105c25f9284845260208420920160051c8201858301610b49565b818355556105a1565b82516001600160a01b03168183015560209092019160010161029c565b6105fe9060045f5284845f209182019101610b49565b5f610290565b80518051906001600160401b03821161041e576106218654610b11565b90601f918281116106dd575b5060209183116001146106715792610662836001959460209487965f926104a05750508160011b915f199060031b1c19161790565b87555b01940191019092610251565b90865f5260205f20915f5b601f19851681106106c5575083602093600196938796938794601f198116106106ad575b505050811b018755610665565b01515f1960f88460031b161c191690555f80806106a0565b9192602060018192868501518155019401920161067c565b61070590885f5260205f208480870160051c82019260208810610546570160051c0190610b49565b5f61062d565b60035f525f51602061159e5f395f51905f529081019083015b8181106107315750610236565b8061073e60019254610b11565b8061074b575b5001610724565b601f9081811184146107635750505f81555b5f610744565b61077e5f9284845260208420920160051c8201858301610b49565b8183555561075d565b82516001600160a01b031681830155602090920191600101610209565b6107ba9060025f5284845f209182019101610b49565b5f6101fd565b80518051906001600160401b03821161041e576107dd8654610b11565b90601f91828111610899575b50602091831160011461082d579261081e836001959460209487965f926104a05750508160011b915f199060031b1c19161790565b87555b019401910190926101be565b90865f5260205f20915f5b601f1985168110610881575083602093600196938796938794601f19811610610869575b505050811b018755610821565b01515f1960f88460031b161c191690555f808061085c565b91926020600181928685015181550194019201610838565b6108c190885f5260205f208480870160051c82019260208810610546570160051c0190610b49565b5f6107e9565b60015f525f5160206115be5f395f51905f52908382015b81830181106108ee5750506101a3565b806108fb60019254610b11565b80610908575b50016108de565b601f9081811184146109205750505f81555b5f610901565b61093b5f9284845260208420920160051c8201858301610b49565b8183555561091a565b63c1faacc560e01b5f5260045ffd5b90506020813d602011610985575b8161096e6020938361098d565b810103126103ce5761097f906109b0565b5f61016e565b3d9150610961565b601f909101601f19168101906001600160401b0382119082101761041e57604052565b51906001600160a01b03821682036103ce57565b6001600160401b03811161041e5760051b60200190565b601f9180601f830112156103ce578151916020926109f8816109c4565b94604093610a09604051978861098d565b828752858088019360051b850101948186116103ce57868501935b868510610a3657505050505050505090565b84516001600160401b0391908281116103ce5787019084603f830112156103ce578982015192831161041e578351610a76848801601f19168c018261098d565b838152858585850101116103ce575f8b858196888397018386015e83010152815201940193610a24565b9080601f830112156103ce57815190602091610abb816109c4565b93610ac9604051958661098d565b81855260208086019260051b8201019283116103ce57602001905b828210610af2575050505090565b81516001600160a01b03811681036103ce578152908301908301610ae4565b90600182811c92168015610b3f575b6020831014610b2b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610b20565b818110610b54575050565b5f8155600101610b49565b03610b6657565b63aaad13f760e01b5f5260045ffdfe6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea2646970667358221220bcd1f81e81572872cd468bd1531ecdcb70ca7c4183202d58ae7bb548f1ddb03564736f6c634300081b0033036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85bb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6","opcodes":"PUSH1 0xC0 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x3CE JUMPI PUSH2 0x15DE DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1C DUP3 DUP6 PUSH2 0x98D JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SWAP1 PUSH2 0x100 DUP2 DUP4 SUB SLT PUSH2 0x3CE JUMPI PUSH2 0x35 DUP2 PUSH2 0x9B0 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP4 SUB PUSH2 0x3CE JUMPI PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3CE JUMPI DUP3 PUSH2 0x6D SWAP2 DUP4 ADD PUSH2 0x9DB JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MLOAD SWAP1 SWAP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3CE JUMPI DUP4 PUSH2 0x8F SWAP2 DUP5 ADD PUSH2 0xAA0 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3CE JUMPI DUP5 PUSH2 0xAE SWAP2 DUP6 ADD PUSH2 0x9DB JUMP JUMPDEST PUSH1 0xA0 DUP5 ADD MLOAD SWAP1 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3CE JUMPI DUP6 PUSH2 0xD0 SWAP2 DUP7 ADD PUSH2 0xAA0 JUMP JUMPDEST PUSH1 0xC0 DUP6 ADD MLOAD SWAP1 SWAP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3CE JUMPI DUP7 PUSH2 0xF2 SWAP2 DUP4 ADD PUSH2 0x9DB JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MLOAD SWAP1 SWAP7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3CE JUMPI PUSH2 0x112 SWAP3 ADD PUSH2 0xAA0 JUMP JUMPDEST SWAP6 PUSH1 0x1 SLOAD SWAP2 PUSH2 0x123 PUSH1 0x2 SLOAD DUP5 PUSH2 0xB5F JUMP JUMPDEST PUSH2 0x132 PUSH1 0x3 SLOAD PUSH1 0x4 SLOAD SWAP1 PUSH2 0xB5F JUMP JUMPDEST PUSH2 0x141 PUSH1 0x5 SLOAD PUSH1 0x6 SLOAD SWAP1 PUSH2 0xB5F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x11B2515F PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3DA JUMPI PUSH0 SWAP2 PUSH2 0x953 JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 DUP2 AND SWAP2 AND SUB PUSH2 0x944 JUMPI PUSH1 0x80 MSTORE DUP1 MLOAD SWAP2 PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x41E JUMPI DUP3 PUSH1 0x1 SSTORE DUP1 DUP4 LT PUSH2 0x8C7 JUMPI JUMPDEST POP PUSH1 0x1 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x15BE PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x7C0 JUMPI POP POP DUP3 MLOAD SWAP3 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x41E JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x41E JUMPI PUSH1 0x20 SWAP1 PUSH1 0x2 SLOAD DUP4 PUSH1 0x2 SSTORE DUP1 DUP5 LT PUSH2 0x7A4 JUMPI JUMPDEST POP ADD PUSH1 0x2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x787 JUMPI POP POP POP POP DUP1 MLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x41E JUMPI PUSH1 0x3 SLOAD DUP3 PUSH1 0x3 SSTORE DUP1 DUP4 LT PUSH2 0x70B JUMPI JUMPDEST POP PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x159E PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x604 JUMPI POP POP DUP3 MLOAD SWAP3 SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x41E JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x41E JUMPI PUSH1 0x20 SWAP1 PUSH1 0x4 SLOAD DUP4 PUSH1 0x4 SSTORE DUP1 DUP5 LT PUSH2 0x5E8 JUMPI JUMPDEST POP ADD PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x5CB JUMPI POP POP POP POP DUP1 MLOAD SWAP1 PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x41E JUMPI PUSH1 0x5 SLOAD DUP3 PUSH1 0x5 SSTORE DUP1 DUP4 LT PUSH2 0x54F JUMPI JUMPDEST POP PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x157E PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP3 SWAP2 PUSH1 0x20 ADD JUMPDEST DUP3 DUP3 LT PUSH2 0x432 JUMPI DUP5 MLOAD DUP7 SWAP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x41E JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x41E JUMPI PUSH1 0x20 SWAP1 PUSH1 0x6 SLOAD DUP4 PUSH1 0x6 SSTORE DUP1 DUP5 LT PUSH2 0x402 JUMPI JUMPDEST POP ADD PUSH1 0x6 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x3E5 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3DA JUMPI PUSH0 SWAP2 PUSH2 0x394 JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0xA08 SWAP1 DUP2 PUSH2 0xB76 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xB3 ADD MSTORE PUSH2 0x83E ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x183 ADD MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3D2 JUMPI JUMPDEST DUP2 PUSH2 0x3AF PUSH1 0x20 SWAP4 DUP4 PUSH2 0x98D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3CE JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x3CE JUMPI DUP2 PUSH2 0x360 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3A2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 DUP4 ADD SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x32C JUMP JUMPDEST PUSH2 0x418 SWAP1 PUSH1 0x6 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB49 JUMP JUMPDEST DUP5 PUSH2 0x320 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x41E JUMPI PUSH2 0x44F DUP7 SLOAD PUSH2 0xB11 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x517 JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x4AB JUMPI SWAP3 PUSH2 0x491 DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x4A0 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x2E4 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x47D JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x4FF JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x4E7 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x494 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x4DA JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x4B6 JUMP JUMPDEST PUSH2 0x540 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 DUP5 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 PUSH1 0x20 DUP9 LT PUSH2 0x546 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0xB49 JUMP JUMPDEST PUSH0 PUSH2 0x45B JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x535 JUMP JUMPDEST PUSH1 0x5 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x157E PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x575 JUMPI POP PUSH2 0x2C9 JUMP JUMPDEST DUP1 PUSH2 0x582 PUSH1 0x1 SWAP3 SLOAD PUSH2 0xB11 JUMP JUMPDEST DUP1 PUSH2 0x58F JUMPI JUMPDEST POP ADD PUSH2 0x568 JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x5A7 JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x588 JUMP JUMPDEST PUSH2 0x5C2 PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB49 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x5A1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 DUP4 ADD SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x29C JUMP JUMPDEST PUSH2 0x5FE SWAP1 PUSH1 0x4 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB49 JUMP JUMPDEST PUSH0 PUSH2 0x290 JUMP JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x41E JUMPI PUSH2 0x621 DUP7 SLOAD PUSH2 0xB11 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x6DD JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x671 JUMPI SWAP3 PUSH2 0x662 DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x4A0 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x251 JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x6C5 JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x6AD JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x665 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x6A0 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x67C JUMP JUMPDEST PUSH2 0x705 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 DUP5 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 PUSH1 0x20 DUP9 LT PUSH2 0x546 JUMPI ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0xB49 JUMP JUMPDEST PUSH0 PUSH2 0x62D JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x159E PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP2 ADD SWAP1 DUP4 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x731 JUMPI POP PUSH2 0x236 JUMP JUMPDEST DUP1 PUSH2 0x73E PUSH1 0x1 SWAP3 SLOAD PUSH2 0xB11 JUMP JUMPDEST DUP1 PUSH2 0x74B JUMPI JUMPDEST POP ADD PUSH2 0x724 JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x763 JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x744 JUMP JUMPDEST PUSH2 0x77E PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB49 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x75D JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 DUP4 ADD SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x209 JUMP JUMPDEST PUSH2 0x7BA SWAP1 PUSH1 0x2 PUSH0 MSTORE DUP5 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xB49 JUMP JUMPDEST PUSH0 PUSH2 0x1FD JUMP JUMPDEST DUP1 MLOAD DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x41E JUMPI PUSH2 0x7DD DUP7 SLOAD PUSH2 0xB11 JUMP JUMPDEST SWAP1 PUSH1 0x1F SWAP2 DUP3 DUP2 GT PUSH2 0x899 JUMPI JUMPDEST POP PUSH1 0x20 SWAP2 DUP4 GT PUSH1 0x1 EQ PUSH2 0x82D JUMPI SWAP3 PUSH2 0x81E DUP4 PUSH1 0x1 SWAP6 SWAP5 PUSH1 0x20 SWAP5 DUP8 SWAP7 PUSH0 SWAP3 PUSH2 0x4A0 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP8 SSTORE JUMPDEST ADD SWAP5 ADD SWAP2 ADD SWAP1 SWAP3 PUSH2 0x1BE JUMP JUMPDEST SWAP1 DUP7 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP6 AND DUP2 LT PUSH2 0x881 JUMPI POP DUP4 PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP7 SWAP4 DUP8 SWAP7 SWAP4 DUP8 SWAP5 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x869 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP8 SSTORE PUSH2 0x821 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x85C JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x838 JUMP JUMPDEST PUSH2 0x8C1 SWAP1 DUP9 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 DUP5 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 PUSH1 0x20 DUP9 LT PUSH2 0x546 JUMPI ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0xB49 JUMP JUMPDEST PUSH0 PUSH2 0x7E9 JUMP JUMPDEST PUSH1 0x1 PUSH0 MSTORE PUSH0 MLOAD PUSH1 0x20 PUSH2 0x15BE PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP1 DUP4 DUP3 ADD JUMPDEST DUP2 DUP4 ADD DUP2 LT PUSH2 0x8EE JUMPI POP POP PUSH2 0x1A3 JUMP JUMPDEST DUP1 PUSH2 0x8FB PUSH1 0x1 SWAP3 SLOAD PUSH2 0xB11 JUMP JUMPDEST DUP1 PUSH2 0x908 JUMPI JUMPDEST POP ADD PUSH2 0x8DE JUMP JUMPDEST PUSH1 0x1F SWAP1 DUP2 DUP2 GT DUP5 EQ PUSH2 0x920 JUMPI POP POP PUSH0 DUP2 SSTORE JUMPDEST PUSH0 PUSH2 0x901 JUMP JUMPDEST PUSH2 0x93B PUSH0 SWAP3 DUP5 DUP5 MSTORE PUSH1 0x20 DUP5 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD DUP6 DUP4 ADD PUSH2 0xB49 JUMP JUMPDEST DUP2 DUP4 SSTORE SSTORE PUSH2 0x91A JUMP JUMPDEST PUSH4 0xC1FAACC5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x985 JUMPI JUMPDEST DUP2 PUSH2 0x96E PUSH1 0x20 SWAP4 DUP4 PUSH2 0x98D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3CE JUMPI PUSH2 0x97F SWAP1 PUSH2 0x9B0 JUMP JUMPDEST PUSH0 PUSH2 0x16E JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x961 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x41E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x3CE JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x41E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1F SWAP2 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x3CE JUMPI DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP3 PUSH2 0x9F8 DUP2 PUSH2 0x9C4 JUMP JUMPDEST SWAP5 PUSH1 0x40 SWAP4 PUSH2 0xA09 PUSH1 0x40 MLOAD SWAP8 DUP9 PUSH2 0x98D JUMP JUMPDEST DUP3 DUP8 MSTORE DUP6 DUP1 DUP9 ADD SWAP4 PUSH1 0x5 SHL DUP6 ADD ADD SWAP5 DUP2 DUP7 GT PUSH2 0x3CE JUMPI DUP7 DUP6 ADD SWAP4 JUMPDEST DUP7 DUP6 LT PUSH2 0xA36 JUMPI POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 SWAP1 DUP3 DUP2 GT PUSH2 0x3CE JUMPI DUP8 ADD SWAP1 DUP5 PUSH1 0x3F DUP4 ADD SLT ISZERO PUSH2 0x3CE JUMPI DUP10 DUP3 ADD MLOAD SWAP3 DUP4 GT PUSH2 0x41E JUMPI DUP4 MLOAD PUSH2 0xA76 DUP5 DUP9 ADD PUSH1 0x1F NOT AND DUP13 ADD DUP3 PUSH2 0x98D JUMP JUMPDEST DUP4 DUP2 MSTORE DUP6 DUP6 DUP6 DUP6 ADD ADD GT PUSH2 0x3CE JUMPI PUSH0 DUP12 DUP6 DUP2 SWAP7 DUP9 DUP4 SWAP8 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP2 MSTORE ADD SWAP5 ADD SWAP4 PUSH2 0xA24 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x3CE JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0xABB DUP2 PUSH2 0x9C4 JUMP JUMPDEST SWAP4 PUSH2 0xAC9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x98D JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x3CE JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xAF2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x3CE JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xAE4 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xB3F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB2B JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xB20 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0xB54 JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xB49 JUMP JUMPDEST SUB PUSH2 0xB66 JUMPI JUMP JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x2623A2D0 EQ PUSH2 0x7F6 JUMPI POP PUSH4 0xBD968C18 EQ PUSH2 0x37 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0xFF DUP5 AND PUSH2 0x7CF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP4 PUSH1 0x1 SWAP5 DUP6 SWAP2 AND OR PUSH0 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP3 DUP3 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP5 MSTORE PUSH32 0xE0376AB400000000000000000000000000000000000000000000000000000000 SWAP2 DUP3 DUP5 DUP7 ADD MSTORE PUSH1 0x20 SWAP7 PUSH1 0x24 SWAP2 DUP9 DUP8 DUP5 DUP2 DUP6 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x7C5 JUMPI PUSH0 SWAP8 PUSH2 0x796 JUMPI JUMPDEST POP DUP8 MLOAD SWAP4 DUP5 MSTORE PUSH32 0x2967AF9600000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP8 DUP7 ADD MSTORE DUP10 DUP6 DUP6 DUP2 DUP7 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x78C JUMPI PUSH0 SWAP6 PUSH2 0x75D JUMPI JUMPDEST POP DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x3B4 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP10 DUP3 ADD DUP12 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x753 JUMPI PUSH2 0x740 JUMPI JUMPDEST POP DUP8 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP9 DUP2 ADD DUP8 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP14 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x71F JUMPI JUMPDEST POP SWAP6 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP1 JUMPDEST PUSH2 0x608 JUMPI JUMPDEST POP DUP12 DUP14 JUMPDEST PUSH2 0x511 JUMPI JUMPDEST POP POP DUP12 DUP12 SWAP1 JUMPDEST PUSH2 0x3FF JUMPI JUMPDEST POP POP POP POP POP DUP7 SWAP8 POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP5 DUP3 ADD SWAP6 DUP7 MSTORE ADDRESS PUSH1 0x20 DUP8 ADD MSTORE SWAP5 DUP9 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x3F5 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0x3E1 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x3BF JUMPI SWAP1 DUP8 SWAP2 PUSH2 0x3C9 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x3BF JUMPI DUP8 SWAP7 PUSH2 0x388 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0x384 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x37B JUMPI POP PUSH2 0x368 JUMPI POP RETURN JUMPDEST PUSH2 0x371 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x378 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0x3B8 JUMPI JUMPDEST PUSH2 0x3A1 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI DUP6 SWAP5 MLOAD SWAP4 PUSH0 DUP1 PUSH2 0x32C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x397 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x3D2 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x384 JUMPI DUP6 PUSH0 PUSH2 0x2F0 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0x3EA SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x3DD JUMPI DUP7 PUSH0 PUSH2 0x2B8 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x6 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x4E1 JUMPI PUSH0 MSTORE DUP2 DUP2 PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD SLOAD AND DUP5 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP13 DUP12 DUP1 MLOAD DUP1 SWAP4 DUP2 SWAP3 DUP9 DUP4 MSTORE DUP14 DUP4 ADD MSTORE PUSH2 0x481 PUSH1 0x44 DUP4 ADD DUP8 PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 DUP11 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x4AE JUMPI JUMPDEST POP POP DUP6 ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x4BE SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x4A0 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x32 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x259 JUMP JUMPDEST DUP14 PUSH1 0x3 SLOAD DUP3 LT ISZERO PUSH2 0x602 JUMPI POP DUP9 SLOAD DUP2 LT ISZERO PUSH2 0x4E1 JUMPI DUP9 PUSH0 MSTORE DUP3 DUP2 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD SLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x5FE JUMPI DUP14 DUP16 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x59B PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x5CF JUMPI JUMPDEST POP POP SWAP1 DUP7 DUP1 SWAP3 ADD SWAP2 POP SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x249 JUMP JUMPDEST PUSH2 0x5E0 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x5BC JUMP JUMPDEST DUP15 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP14 DUP1 REVERT JUMPDEST POP PUSH2 0x24E JUMP JUMPDEST DUP14 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x719 JUMPI POP PUSH1 0x2 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x6EE JUMPI DUP1 PUSH0 MSTORE DUP4 DUP3 PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE ADD SLOAD AND SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x6EA JUMPI DUP15 SWAP1 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x694 PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x6C7 JUMPI JUMPDEST POP POP DUP7 DUP1 SWAP2 ADD SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 POP PUSH2 0x240 JUMP JUMPDEST PUSH2 0x6D8 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x6B5 JUMP JUMPDEST DUP15 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x32 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP PUSH2 0x245 JUMP JUMPDEST PUSH2 0x72F SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x236 JUMP JUMPDEST PUSH2 0x74B SWAP2 SWAP14 POP PUSH2 0x862 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0x1FA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x785 JUMPI JUMPDEST PUSH2 0x775 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x17F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x76B JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7BE JUMPI JUMPDEST PUSH2 0x7AE DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP6 PUSH0 PUSH2 0x13D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7A4 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 SLOAD PUSH0 SWAP4 SWAP3 PUSH1 0x1 DUP1 DUP4 AND SWAP4 DUP4 DUP3 SHR SWAP4 DUP6 ISZERO PUSH2 0x9C8 JUMPI JUMPDEST PUSH1 0x20 SWAP6 DUP7 DUP7 LT DUP2 EQ PUSH2 0x99B JUMPI DUP6 DUP6 MSTORE SWAP1 DUP2 ISZERO PUSH2 0x95E JUMPI POP PUSH1 0x1 EQ PUSH2 0x920 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP4 SWAP5 SWAP6 POP PUSH0 SWAP3 SWAP2 SWAP3 MSTORE DUP4 PUSH0 KECCAK256 SWAP3 DUP5 PUSH0 SWAP5 JUMPDEST DUP4 DUP7 LT PUSH2 0x94A JUMPI POP POP POP POP ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST DUP1 SLOAD DUP6 DUP8 ADD DUP4 ADD MSTORE SWAP5 ADD SWAP4 DUP6 SWAP1 DUP3 ADD PUSH2 0x932 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP6 ADD MSTORE POP POP POP SWAP1 ISZERO ISZERO PUSH1 0x5 SHL ADD ADD SWAP2 POP PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x8FA JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xD1 0xF8 0x1E DUP2 JUMPI 0x28 PUSH19 0xCD468BD1531ECDCB70CA7C4183202D58AE7BB5 BASEFEE CALL 0xDD 0xB0 CALLDATALOAD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER SUB PUSH12 0x6384B5ECA791C62761152D0C PUSH26 0xBB0604C104A5FB6F4EB0703F3154BB3DB0C2575A0E9E593C00F9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85BB10E2D527612073B26EECDFD71 PUSH31 0x6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF600000000000000000000000000 ","sourceMap":"807:3948:32:-:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;:::i;:::-;;1983:12;807:3948;;2004:23;:16;807:3948;2004:23;;:::i;:::-;2100:28;2074:17;807:3948;2100:21;807:3948;2100:28;;:::i;:::-;2195:22;2175:11;807:3948;2195:15;807:3948;2195:22;;:::i;:::-;807:3948;;-1:-1:-1;;;2341:70:32;;807:3948;;2100:21;807:3948;-1:-1:-1;;;;;807:3948:32;;2341:70;;;;;;;-1:-1:-1;2341:70:32;;;-1:-1:-1;;;;;;;807:3948:32;;;;;2425:22;2421:75;;807:3948;2506:52;807:3948;;;;;;;;;1983:12;807:3948;;;;;;-1:-1:-1;;1983:12:32;-1:-1:-1;807:3948:32;;;-1:-1:-1;;;;;;;;;;;807:3948:32;;;;;;;;;;-1:-1:-1;;807:3948:32;;;;-1:-1:-1;;;;;;;807:3948:32;;;;;;;;;;;2004:16;807:3948;;2004:16;807:3948;;;;;;;;;2004:16;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;-1:-1:-1;807:3948:32;;;;;;;;;;;;;;;;;;2074:17;807:3948;;2074:17;807:3948;;;;;;;-1:-1:-1;2074:17:32;-1:-1:-1;807:3948:32;;;-1:-1:-1;;;;;;;;;;;807:3948:32;;;;;;;;;;-1:-1:-1;;807:3948:32;;;;-1:-1:-1;;;;;;;807:3948:32;;;;;;;;;;;2100:21;807:3948;;2100:21;807:3948;;;;;;;;;2100:21;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;-1:-1:-1;807:3948:32;;;;;;;;;;;;;;;;;;2175:11;807:3948;;2175:11;807:3948;;;;;;;-1:-1:-1;2175:11:32;-1:-1:-1;807:3948:32;;;-1:-1:-1;;;;;;;;;;;807:3948:32;;;;;;;;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;;2195:15;807:3948;;2195:15;807:3948;;;;;;;;;2195:15;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;-1:-1:-1;807:3948:32;;;;;;;;-1:-1:-1;;;2865:21:32;;807:3948;;2100:21;807:3948;-1:-1:-1;;;;;807:3948:32;;2865:21;;;;;;;-1:-1:-1;2865:21:32;;;807:3948;-1:-1:-1;;;;;;807:3948:32;;2826:62;807:3948;;;;;;;;;;;;;;;;;;;;;;;;;;2865:21;;;807:3948;2865:21;;807:3948;2865:21;;;;;;807:3948;2865:21;;;:::i;:::-;;;807:3948;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;2865:21;;;807:3948;-1:-1:-1;807:3948:32;;2865:21;;;-1:-1:-1;2865:21:32;;;807:3948;;;-1:-1:-1;807:3948:32;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;1983:12;807:3948;;;;;;2195:15;-1:-1:-1;807:3948:32;;;-1:-1:-1;807:3948:32;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;807:3948:32;;2100:21;807:3948;;-1:-1:-1;807:3948:32;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1983:12;807:3948;;;;;;-1:-1:-1;807:3948:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;-1:-1:-1;;807:3948:32;;;;;;;;;;1983:12;807:3948;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:17;807:3948;;;;;;;;;;;;;;;;1983:12;807:3948;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;;;;;2175:11;807:3948;;;;;;;;;;;2175:11;807:3948;;;;:::i;:::-;;;;;;;;;;;;2175:11;-1:-1:-1;807:3948:32;-1:-1:-1;;;;;;;;;;;807:3948:32;;;;;;;;;;;;;;;;;;1983:12;807:3948;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;;;2175:11;807:3948;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;1983:12;807:3948;;;;;;2100:21;-1:-1:-1;807:3948:32;;;-1:-1:-1;807:3948:32;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1983:12;807:3948;;;;;;-1:-1:-1;807:3948:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;-1:-1:-1;;807:3948:32;;;;;;;;;;1983:12;807:3948;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:17;807:3948;;;;;;;;;;;;;;;;1983:12;807:3948;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;;;;;2175:11;807:3948;;;;;;;;;;2175:11;807:3948;;;;:::i;:::-;;;;;2074:17;-1:-1:-1;807:3948:32;-1:-1:-1;;;;;;;;;;;807:3948:32;;;;;;;;;;;;;;;;;;1983:12;807:3948;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;;;2175:11;807:3948;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;1983:12;807:3948;;;;;;2004:16;-1:-1:-1;807:3948:32;;;-1:-1:-1;807:3948:32;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1983:12;807:3948;;;;;;-1:-1:-1;807:3948:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;-1:-1:-1;;807:3948:32;;;;;;;;;;1983:12;807:3948;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:17;807:3948;;;;;;;;;;;;;;;;1983:12;807:3948;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;-1:-1:-1;807:3948:32;;;;;2175:11;807:3948;;;;;;;;;;2175:11;807:3948;;;;:::i;:::-;;;;;1983:12;-1:-1:-1;807:3948:32;-1:-1:-1;;;;;;;;;;;807:3948:32;;;;;;;;;;;;;;;;;;;1983:12;807:3948;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;;;2175:11;807:3948;;;;;;;:::i;:::-;;;;;;;2421:75;2470:15;;;-1:-1:-1;2470:15:32;2100:21;-1:-1:-1;2470:15:32;2341:70;;;807:3948;2341:70;;807:3948;2341:70;;;;;;807:3948;2341:70;;;:::i;:::-;;;807:3948;;;;;;;:::i;:::-;2341:70;;;;;;-1:-1:-1;2341:70:32;;807:3948;;;;;-1:-1:-1;;807:3948:32;;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;807:3948:32;;;;;;:::o;:::-;-1:-1:-1;;;;;807:3948:32;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;807:3948:32;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;807:3948:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;1418:149:16;1500:6;1496:65;;1418:149::o;1496:65::-;1529:21;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_string_storage":{"entryPoint":2276,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2211,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_2885":{"entryPoint":2146,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"9543":[{"length":32,"start":179},{"length":32,"start":2110}],"9546":[{"length":32,"start":387}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f915f3560e01c9081632623a2d0146107f6575063bd968c1814610037575f80fd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b4575f549260ff84166107cf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0093600194859116175f5573ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016928251917f851c1bb3000000000000000000000000000000000000000000000000000000008084527fe0376ab40000000000000000000000000000000000000000000000000000000091828486015260209660249188878481855afa9687156107c5575f97610796575b5087519384527f2967af960000000000000000000000000000000000000000000000000000000090818786015289858581865afa94851561078c575f9561075d575b50807f00000000000000000000000000000000000000000000000000000000000000001695863b156103b45789517f2f2ff15d000000000000000000000000000000000000000000000000000000008082528982018b81523060208201529091905f90829081906040010381838d5af1801561075357610740575b50873b156104dd578a519081528881018781523060208201528d90829081906040010381838c5af180156104d3578e9695949392918e9161071f575b5095909192939495905b610608575b508b8d5b610511575b50508b8b905b6103ff575b5050505050869750813b156103dd5784517f36568abe0000000000000000000000000000000000000000000000000000000080825284820195865230602087015294889082908190604001038183875af180156103f5579088916103e1575b5050813b156103dd57845184815283810191825230602083015290879082908190604001038183865af180156103bf579087916103c9575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa9586156103bf578796610388575b5050803b1561038457835192835290820193845230602085015290928491849182908490829060400103925af190811561037b57506103685750f35b61037190610862565b6103785780f35b80fd5b513d84823e3d90fd5b8580fd5b819750809296503d83116103b8575b6103a181836108a3565b810103126103b457859451935f8061032c565b5f80fd5b503d610397565b85513d89823e3d90fd5b6103d290610862565b61038457855f6102f0565b8680fd5b6103ea90610862565b6103dd57865f6102b8565b86513d8a823e3d90fd5b60055481101561050c57600680548210156104e1575f5281817ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f015416843b156104dd578c8b8051809381928883528d83015261048160448301877f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0016108e4565b908a830152038183895af180156104d3578e9695949392918e916104ae575b505085019091929394610254565b6104be9192939495969750610862565b6104cf57908c949392918c5f6104a0565b8b80fd5b8b513d8f823e3d90fd5b8c80fd5b8560328a7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610259565b8d600354821015610602575088548110156104e157885f5282817f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b015416853b156105fe578d8f8b8e51938492839288845283015260608b83015261059b60648301877fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916105cf575b5050908680920191509192939495610249565b6105e0919293949596979850610862565b6104dd57908d95949392918d5f6105bc565b8e8d51903d90823e3d90fd5b8d80fd5b5061024e565b8d80548210156107195750600280548210156106ee57805f5283827f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01541690863b156106ea578e908b8e51938492839288845283015260608b83015261069460648301877fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6016108e4565b9060448301520381838a5af180156105f2578f979695949392918f916106c7575b50508680910191929394959650610240565b6106d8919293949596979850610862565b6104dd57908d95949392918d5f6106b5565b8e80fd5b8660328b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50610245565b61072f9192939495969750610862565b6104cf57908c949392918c5f610236565b61074b919d50610862565b5f9b5f6101fa565b8c513d5f823e3d90fd5b9094508981813d8311610785575b61077581836108a3565b810103126103b45751935f61017f565b503d61076b565b89513d5f823e3d90fd5b9096508881813d83116107be575b6107ae81836108a3565b810103126103b45751955f61013d565b503d6107a4565b88513d5f823e3d90fd5b507f0dc149f0000000000000000000000000000000000000000000000000000000005f525ffd5b346103b4575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103b45760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff811161087657604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761087657604052565b80545f939260018083169383821c9385156109c8575b602095868610811461099b5785855290811561095e5750600114610920575b5050505050565b90939495505f92919252835f2092845f945b83861061094a57505050500101905f80808080610919565b805485870183015294019385908201610932565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168685015250505090151560051b010191505f80808080610919565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936108fa56fea2646970667358221220bcd1f81e81572872cd468bd1531ecdcb70ca7c4183202d58ae7bb548f1ddb03564736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x2623A2D0 EQ PUSH2 0x7F6 JUMPI POP PUSH4 0xBD968C18 EQ PUSH2 0x37 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0xFF DUP5 AND PUSH2 0x7CF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP4 PUSH1 0x1 SWAP5 DUP6 SWAP2 AND OR PUSH0 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP3 DUP3 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP5 MSTORE PUSH32 0xE0376AB400000000000000000000000000000000000000000000000000000000 SWAP2 DUP3 DUP5 DUP7 ADD MSTORE PUSH1 0x20 SWAP7 PUSH1 0x24 SWAP2 DUP9 DUP8 DUP5 DUP2 DUP6 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x7C5 JUMPI PUSH0 SWAP8 PUSH2 0x796 JUMPI JUMPDEST POP DUP8 MLOAD SWAP4 DUP5 MSTORE PUSH32 0x2967AF9600000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP8 DUP7 ADD MSTORE DUP10 DUP6 DUP6 DUP2 DUP7 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x78C JUMPI PUSH0 SWAP6 PUSH2 0x75D JUMPI JUMPDEST POP DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x3B4 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP10 DUP3 ADD DUP12 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x753 JUMPI PUSH2 0x740 JUMPI JUMPDEST POP DUP8 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP9 DUP2 ADD DUP8 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP14 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x71F JUMPI JUMPDEST POP SWAP6 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP1 JUMPDEST PUSH2 0x608 JUMPI JUMPDEST POP DUP12 DUP14 JUMPDEST PUSH2 0x511 JUMPI JUMPDEST POP POP DUP12 DUP12 SWAP1 JUMPDEST PUSH2 0x3FF JUMPI JUMPDEST POP POP POP POP POP DUP7 SWAP8 POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP5 DUP3 ADD SWAP6 DUP7 MSTORE ADDRESS PUSH1 0x20 DUP8 ADD MSTORE SWAP5 DUP9 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x3F5 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0x3E1 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x3DD JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x3BF JUMPI SWAP1 DUP8 SWAP2 PUSH2 0x3C9 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x3BF JUMPI DUP8 SWAP7 PUSH2 0x388 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0x384 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x37B JUMPI POP PUSH2 0x368 JUMPI POP RETURN JUMPDEST PUSH2 0x371 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x378 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0x3B8 JUMPI JUMPDEST PUSH2 0x3A1 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI DUP6 SWAP5 MLOAD SWAP4 PUSH0 DUP1 PUSH2 0x32C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x397 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x3D2 SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x384 JUMPI DUP6 PUSH0 PUSH2 0x2F0 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0x3EA SWAP1 PUSH2 0x862 JUMP JUMPDEST PUSH2 0x3DD JUMPI DUP7 PUSH0 PUSH2 0x2B8 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD DUP2 LT ISZERO PUSH2 0x50C JUMPI PUSH1 0x6 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x4E1 JUMPI PUSH0 MSTORE DUP2 DUP2 PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD SLOAD AND DUP5 EXTCODESIZE ISZERO PUSH2 0x4DD JUMPI DUP13 DUP12 DUP1 MLOAD DUP1 SWAP4 DUP2 SWAP3 DUP9 DUP4 MSTORE DUP14 DUP4 ADD MSTORE PUSH2 0x481 PUSH1 0x44 DUP4 ADD DUP8 PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 DUP11 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x4D3 JUMPI DUP15 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP15 SWAP2 PUSH2 0x4AE JUMPI JUMPDEST POP POP DUP6 ADD SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH2 0x254 JUMP JUMPDEST PUSH2 0x4BE SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x4A0 JUMP JUMPDEST DUP12 DUP1 REVERT JUMPDEST DUP12 MLOAD RETURNDATASIZE DUP16 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x32 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x259 JUMP JUMPDEST DUP14 PUSH1 0x3 SLOAD DUP3 LT ISZERO PUSH2 0x602 JUMPI POP DUP9 SLOAD DUP2 LT ISZERO PUSH2 0x4E1 JUMPI DUP9 PUSH0 MSTORE DUP3 DUP2 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD SLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x5FE JUMPI DUP14 DUP16 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x59B PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x5CF JUMPI JUMPDEST POP POP SWAP1 DUP7 DUP1 SWAP3 ADD SWAP2 POP SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH2 0x249 JUMP JUMPDEST PUSH2 0x5E0 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x5BC JUMP JUMPDEST DUP15 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP14 DUP1 REVERT JUMPDEST POP PUSH2 0x24E JUMP JUMPDEST DUP14 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x719 JUMPI POP PUSH1 0x2 DUP1 SLOAD DUP3 LT ISZERO PUSH2 0x6EE JUMPI DUP1 PUSH0 MSTORE DUP4 DUP3 PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE ADD SLOAD AND SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x6EA JUMPI DUP15 SWAP1 DUP12 DUP15 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 DUP9 DUP5 MSTORE DUP4 ADD MSTORE PUSH1 0x60 DUP12 DUP4 ADD MSTORE PUSH2 0x694 PUSH1 0x64 DUP4 ADD DUP8 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD PUSH2 0x8E4 JUMP JUMPDEST SWAP1 PUSH1 0x44 DUP4 ADD MSTORE SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x5F2 JUMPI DUP16 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP16 SWAP2 PUSH2 0x6C7 JUMPI JUMPDEST POP POP DUP7 DUP1 SWAP2 ADD SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 POP PUSH2 0x240 JUMP JUMPDEST PUSH2 0x6D8 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4DD JUMPI SWAP1 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP14 PUSH0 PUSH2 0x6B5 JUMP JUMPDEST DUP15 DUP1 REVERT JUMPDEST DUP7 PUSH1 0x32 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP PUSH2 0x245 JUMP JUMPDEST PUSH2 0x72F SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP7 SWAP8 POP PUSH2 0x862 JUMP JUMPDEST PUSH2 0x4CF JUMPI SWAP1 DUP13 SWAP5 SWAP4 SWAP3 SWAP2 DUP13 PUSH0 PUSH2 0x236 JUMP JUMPDEST PUSH2 0x74B SWAP2 SWAP14 POP PUSH2 0x862 JUMP JUMPDEST PUSH0 SWAP12 PUSH0 PUSH2 0x1FA JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP5 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x785 JUMPI JUMPDEST PUSH2 0x775 DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP4 PUSH0 PUSH2 0x17F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x76B JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP9 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7BE JUMPI JUMPDEST PUSH2 0x7AE DUP2 DUP4 PUSH2 0x8A3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x3B4 JUMPI MLOAD SWAP6 PUSH0 PUSH2 0x13D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x7A4 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH32 0xDC149F000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x3B4 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x3B4 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x876 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 SLOAD PUSH0 SWAP4 SWAP3 PUSH1 0x1 DUP1 DUP4 AND SWAP4 DUP4 DUP3 SHR SWAP4 DUP6 ISZERO PUSH2 0x9C8 JUMPI JUMPDEST PUSH1 0x20 SWAP6 DUP7 DUP7 LT DUP2 EQ PUSH2 0x99B JUMPI DUP6 DUP6 MSTORE SWAP1 DUP2 ISZERO PUSH2 0x95E JUMPI POP PUSH1 0x1 EQ PUSH2 0x920 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP4 SWAP5 SWAP6 POP PUSH0 SWAP3 SWAP2 SWAP3 MSTORE DUP4 PUSH0 KECCAK256 SWAP3 DUP5 PUSH0 SWAP5 JUMPDEST DUP4 DUP7 LT PUSH2 0x94A JUMPI POP POP POP POP ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST DUP1 SLOAD DUP6 DUP8 ADD DUP4 ADD MSTORE SWAP5 ADD SWAP4 DUP6 SWAP1 DUP3 ADD PUSH2 0x932 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP6 ADD MSTORE POP POP POP SWAP1 ISZERO ISZERO PUSH1 0x5 SHL ADD ADD SWAP2 POP PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x919 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x8FA JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xD1 0xF8 0x1E DUP2 JUMPI 0x28 PUSH19 0xCD468BD1531ECDCB70CA7C4183202D58AE7BB5 BASEFEE CALL 0xDD 0xB0 CALLDATALOAD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"807:3948:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3025:70;;807:3948;3120:4;;807:3948;;;;;;;;3258:24;;807:3948;;;;;;3234:145;;;3310:59;3234:145;;;;;807:3948;3234:145;807:3948;;3234:145;;;;;;;;;;;;;807:3948;3234:145;;;807:3948;;;;3412:153;;;3488:67;3412:153;;;;;807:3948;3412:153;;;;;;;;;;;;807:3948;3412:153;;;807:3948;3576:11;;;807:3948;3576:58;;;;;;807:3948;;;3576:58;;;;;;807:3948;;;3628:4;807:3948;;;;;;;;;;;;;;;3576:58;;;;;;;;;;;;807:3948;3644:50;;;;;;807:3948;;3644:50;;;;;;807:3948;;;3628:4;807:3948;;;;3628:4;;807:3948;;;;;;3644:50;;;;;;;;;;;;;;;;;;;;;807:3948;3734:13;;;;;;;;3729:245;3120:4;;;3729:245;-1:-1:-1;4020:13:32;;3120:4;;;4015:266;4335:13;;;;4330:167;3120:4;;;4330:167;4538:61;;;;;;;;;;;;;807:3948;;;4538:61;;;;;;807:3948;;;3628:4;807:3948;;;;;;;;;;;;;4538:61;;;;;;;;;;;;;;;4330:167;4609:53;;;;;;;807:3948;;4609:53;;;;;;807:3948;;;3628:4;807:3948;;;;;;;;;;;;;4609:53;;;;;;;;;;;;;;;4330:167;807:3948;;;;;4698:32;;;;;;;;;;;;;;;;;;4330:167;4673:73;;;;;;;807:3948;;4673:73;;;;;;807:3948;;;3628:4;807:3948;;;;;;;;;;;;;;;;;;4673:73;;;;;;;;;;;;807:3948;;4673:73;;;;:::i;:::-;807:3948;;4673:73;807:3948;;;;4673:73;807:3948;;;;;;;;4673:73;807:3948;;;4698:32;;;;;;;;;;;;;;;;;;:::i;:::-;;;807:3948;;;;;;;4698:32;;;;;807:3948;;;;4698:32;;;;;;807:3948;;;;;;;;;4609:53;;;;:::i;:::-;807:3948;;4609:53;;;;;807:3948;;;4538:61;;;;:::i;:::-;807:3948;;4538:61;;;;;807:3948;;;;;;;;;4374:3;4354:11;807:3948;4350:22;;;;;4467:15;807:3948;;;;;;;;;;;;;;;4393:93;;;;;807:3948;;;;4393:93;;;;;;;;;;807:3948;;;;;;;;;:::i;:::-;;;;;;4393:93;;;;;;;;;;;;;;;;;;;;;4374:3;;;;807:3948;4335:13;;;;;;;4393:93;;;;;;;;;;;:::i;:::-;807:3948;;4393:93;;;;;;;;;;807:3948;;;;4393:93;807:3948;;;;;;;;;4393:93;807:3948;;;;;;;;;;;;;4350:22;;;4065:3;807:3948;;;4035:28;;;;;807:3948;;;;;;;;;;;;;;;;;4084:186;;;;;807:3948;;;;;4084:186;;;;;;;;;;807:3948;;;;;;;;;;;;;;:::i;:::-;;;;;;4084:186;;;;;;;;;;;;;;;;;;;;;;4065:3;;;;;;;807:3948;4020:13;;;;;;;;;4084:186;;;;;;;;;;;;:::i;:::-;807:3948;;4084:186;;;;;;;;;;;;807:3948;;;;;;;;;;;4084:186;807:3948;;;4035:28;;;;3774:3;807:3948;;;3749:23;;;;;3860:19;;807:3948;;;;;;;;;;;;;;;;3793:170;;;;;;807:3948;;;;;3793:170;;;;;;;;;;807:3948;;;;;;;;;;;;;;:::i;:::-;;;;;;3793:170;;;;;;;;;;;;;;;;;;;;;;3774:3;;;;;;807:3948;3734:13;;;;;;;;;3793:170;;;;;;;;;;;;:::i;:::-;807:3948;;3793:170;;;;;;;;;;;;807:3948;;;;;;;;;;;;;3749:23;;;;3644:50;;;;;;;;;;;:::i;:::-;807:3948;;3644:50;;;;;;;;;;3576:58;;;;;;:::i;:::-;807:3948;3576:58;;;;;807:3948;;;;;;;;;3412:153;;;;;;;;;;;;;;;;;:::i;:::-;;;807:3948;;;;;3412:153;;;;;;;;;;807:3948;;;;;;;;;3234:145;;;;;;;;;;;;;;;;;:::i;:::-;;;807:3948;;;;;3234:145;;;;;;;;;;807:3948;;;;;;;;;3025:70;3064:20;;807:3948;3064:20;807:3948;3064:20;807:3948;;;;;;;;;;;;858:67;807:3948;858:67;807:3948;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;807:3948:32;;;;;-1:-1:-1;807:3948:32;;;-1:-1:-1;807:3948:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;807:3948:32;;;;;;;;-1:-1:-1;807:3948:32;;;;;;;;;-1:-1:-1;807:3948:32;;;;;-1:-1:-1;807:3948:32;;;;;;;"},"methodIdentifiers":{"balancerContractRegistry()":"2623a2d0","initializeBalancerContractRegistry()":"bd968c18"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"balancerContractRegistry_\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"routerNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"routerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"poolFactoryNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"poolFactoryAddresses\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"aliasNames\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"aliasAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"balancerContractRegistry\",\"outputs\":[{\"internalType\":\"contract IBalancerContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initializeBalancerContractRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyInitialized()\":[{\"notice\":\"The initialization can only be done once.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"VaultMismatch()\":[{\"notice\":\"The Vault passed in as a sanity check doesn't match the Vault associated with the registry.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/BalancerContractRegistryInitializer.sol\":\"BalancerContractRegistryInitializer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/standalone-utils/IBalancerContractRegistry.sol\":{\"keccak256\":\"0xc243ec53db3f6df55e600459e723c1b15642eeb12f2202992edaa39af850d47d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b130e873859d2e6b4778be1bdb05a75019cc7f97e23092b8210b3ee9573b6113\",\"dweb:/ipfs/QmfQGk6ecHefaHiNKCH9dnUp7YMAuvzvPQLQwmri7Nq6Cc\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0x2b001b0e402cb94f135c49e40cec96138e3842db5b2b1f46b1bb8d34abe1eecb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5d4336b62b3919e0fbd5e0f3ff2f29e1056c07b4c62c742797003733404416e2\",\"dweb:/ipfs/QmbQqFz4DPBcEEaHAV5HbB5aAQkSw4JZtck1fJCJrmbpw2\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/BalancerContractRegistryInitializer.sol\":{\"keccak256\":\"0x3ddb85189d6dcb837ec5097d7e8aa3569016b11c4e5c35c04fcede6c1d23fdda\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://036c8a5cee1c705f95688af73b813538324fd272a5b1d13cfae793cd30114bd4\",\"dweb:/ipfs/QmcghNL3fboMjDACbVUK8qa128QUWzCDWiHD6iu2QYT9RE\"]}},\"version\":1}"}},"contracts/ProtocolFeeControllerMigration.sol":{"ProtocolFeeControllerMigration":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"contract IProtocolFeeController","name":"_newFeeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyMigrated","type":"error"},{"inputs":[],"name":"InvalidFeeController","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"finalizeMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMigrationComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"migratePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":671,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":616,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"6101206040818152346101bc5780826114eb80380380916100208285610268565b8339810103126101bc576100338261029f565b610040602080940161029f565b3060805260a0829052825163217cb6f560e21b81526001600160a01b03928381169290918681600481875afa90811561022657908592915f91610230575b5060c0521691845163fbfa77cf60e01b81528681600481875afa90811561022657829186915f916101ed575b5016148015906101e0575b6101d157600492869260e05260018060a01b03195f5416175f5584519283809263aaabadc560e01b82525afa9384156101c7575f9461018a575b5050610100921682525161123791826102b483396080518261118a015260a051828181610ad001528181610f610152610fea015260c05182818161054d015281816105c2015261108a015260e05182818160af0152610bf30152518181816103c10152818161042401528181610482015281816104c3015281816106d80152818161073b01528181610799015281816107db0152610c2e0152f35b9080929450813d83116101c0575b6101a28183610268565b810103126101bc575182811681036101bc57915f806100ef565b5f80fd5b503d610198565b83513d5f823e3d90fd5b63d6f1cb0560e01b5f5260045ffd5b508360c0511683146100b5565b925050508681813d831161021f575b6102068183610268565b810103126101bc5784610219839261029f565b5f6100aa565b503d6101fc565b86513d5f823e3d90fd5b809350888092503d8311610261575b6102498183610268565b810103126101bc5761025b859261029f565b5f61007e565b503d61023f565b601f909101601f19168101906001600160401b0382119082101761028b57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101bc5756fe6080806040526004361015610012575f80fd5b5f905f358060e01c91826351da116d146110ae575081637ea3a9641461105e578163851c1bb31461100e5781638d928af814610fbe578163aaabadc514610f0e578163b78b608714610a4b57508063b8350e27146100fb578063d7128084146100d65763fbfa77cf14610083575f80fd5b346100d357806003193601126100d357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346100d357806003193601126100d35760ff6020915460a01c166040519015158152f35b50346100d35760206003193601126100d35767ffffffffffffffff60043581811161083c573660238201121561083c578060040135918211610a1e578160051b906040519261014d602084018561111e565b8352602460208401928201019036821161087357602401915b8183106109f1575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109c95760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d815460ff8160a01c166109a1578060ff849260a81c16156102ac575b50805b82518110156102855773ffffffffffffffffffffffffffffffffffffffff808354169060208360051b8601015116813b156102815783916024839260405194859384927f0874327f00000000000000000000000000000000000000000000000000000000845260048401525af190811561027657839161025e575b50506001016101d9565b610267906110dd565b61027257815f610254565b5080fd5b6040513d85823e3d90fd5b8380fd5b50807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b8075010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff9316178355166040517f851c1bb3000000000000000000000000000000000000000000000000000000008082527f8a3c5c69000000000000000000000000000000000000000000000000000000006004830152602082602481865afa918215610854578492610969575b5060209060246040518095819382527fa93df2a40000000000000000000000000000000000000000000000000000000060048301525afa918215610276578392610932575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561083c576040517f2f2ff15d0000000000000000000000000000000000000000000000000000000080825260048201839052306024830152908481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af190811561088b57859161091e575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561028157604051908152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af190811561085457849161090a575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108545784916108d5575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561088b57859261089a575b5073ffffffffffffffffffffffffffffffffffffffff85541690813b156108965785916024839260405194859384927f8a3c5c6900000000000000000000000000000000000000000000000000000000845260048401525af190811561088b578591610877575b505473ffffffffffffffffffffffffffffffffffffffff1690813b156108735784916024839260405194859384927fa93df2a400000000000000000000000000000000000000000000000000000000845260048401525af190811561085457849161085f575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561083c576040517f36568abe0000000000000000000000000000000000000000000000000000000080825260048201929092523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610854578491610840575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561083c5760405190815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1801561083157156101d657610826906110dd565b61027257815f6101d6565b6040513d84823e3d90fd5b8280fd5b610849906110dd565b61083c57825f610780565b6040513d86823e3d90fd5b610868906110dd565b61083c57825f6106bf565b8480fd5b610880906110dd565b61028157835f610659565b6040513d87823e3d90fd5b8580fd5b945090506020843d6020116108cd575b816108b76020938361111e565b810103126108c957859351905f6105f2565b5f80fd5b3d91506108aa565b9350506020833d602011610902575b816108f16020938361111e565b810103126108c9578492515f61057d565b3d91506108e4565b610913906110dd565b61083c57825f610508565b610927906110dd565b61028157835f610469565b925090506020823d602011610961575b8161094f6020938361111e565b810103126108c957839151905f6103a9565b3d9150610942565b935090506020833d602011610999575b816109866020938361111e565b810103126108c957915184926020610364565b3d9150610979565b6004837fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b6004827f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b823573ffffffffffffffffffffffffffffffffffffffff8116810361089657815260209283019201610166565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b9050346108c9575f6003193601126108c9577fffffffff00000000000000000000000000000000000000000000000000000000610a88911661115f565b9073ffffffffffffffffffffffffffffffffffffffff604051927faaabadc50000000000000000000000000000000000000000000000000000000084526020938481600481867f0000000000000000000000000000000000000000000000000000000000000000165afa8015610e1c57839286925f92610edc575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa908115610e1c575f91610ea6575b5015610e7e575f5460ff8160a01c16610e56577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f2d7713890000000000000000000000000000000000000000000000000000000060048201819052937f000000000000000000000000000000000000000000000000000000000000000083168183602481845afa928315610e1c575f93610e27575b50837f00000000000000000000000000000000000000000000000000000000000000001693843b156108c9576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018590523060248201525f81604481838a5af18015610e1c57610e09575b50958596865416823b15610e055760248792836040519586948593845260048401525af190811561088b578591610df1575b5050823b15610da7576040517f36568abe000000000000000000000000000000000000000000000000000000008082526004820193909352306024820152848160448183885af190811561088b578591610ddd575b50506040517fa217fddf0000000000000000000000000000000000000000000000000000000081528181600481875afa91821561088b578592610dac575b5050823b15610da75760405191825260048201523060248201529082908290604490829084905af1801561083157610d975750f35b610da0906110dd565b6100d35780f35b505050fd5b8195508092503d8311610dd6575b610dc4818361111e565b810103126108c9578392515f80610d62565b503d610dba565b610de6906110dd565b610da757835f610d24565b610dfa906110dd565b610da757835f610ccf565b8680fd5b610e149196506110dd565b5f945f610c9d565b6040513d5f823e3d90fd5b9092508181813d8311610e4f575b610e3f818361111e565b810103126108c95751915f610c2a565b503d610e35565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90508381813d8311610ed5575b610ebd818361111e565b810103126108c9575180151581036108c9575f610b54565b503d610eb3565b6064919250610f0090843d8611610f07575b610ef8818361111e565b8101906111d5565b9190610b03565b503d610eee565b346108c9575f6003193601126108c9576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610e1c576020925f92610f9f575b5060405191168152f35b610fb7919250833d8511610f0757610ef8818361111e565b9083610f95565b346108c9575f6003193601126108c957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346108c95760206003193601126108c9576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036108c95761105660209161115f565b604051908152f35b346108c9575f6003193601126108c957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346108c9575f6003193601126108c95760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b67ffffffffffffffff81116110f157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110f157604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110f15760405251902090565b908160209103126108c9575173ffffffffffffffffffffffffffffffffffffffff811681036108c9579056fea2646970667358221220125bce215259ea60cf119045f492046669f9f38f7080a1ace3863c2eb3a863b464736f6c634300081b0033","opcodes":"PUSH2 0x120 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x1BC JUMPI DUP1 DUP3 PUSH2 0x14EB DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x268 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x1BC JUMPI PUSH2 0x33 DUP3 PUSH2 0x29F JUMP JUMPDEST PUSH2 0x40 PUSH1 0x20 DUP1 SWAP5 ADD PUSH2 0x29F JUMP JUMPDEST ADDRESS PUSH1 0x80 MSTORE PUSH1 0xA0 DUP3 SWAP1 MSTORE DUP3 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP3 SWAP1 SWAP2 DUP7 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x226 JUMPI SWAP1 DUP6 SWAP3 SWAP2 PUSH0 SWAP2 PUSH2 0x230 JUMPI JUMPDEST POP PUSH1 0xC0 MSTORE AND SWAP2 DUP5 MLOAD PUSH4 0xFBFA77CF PUSH1 0xE0 SHL DUP2 MSTORE DUP7 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x226 JUMPI DUP3 SWAP2 DUP7 SWAP2 PUSH0 SWAP2 PUSH2 0x1ED JUMPI JUMPDEST POP AND EQ DUP1 ISZERO SWAP1 PUSH2 0x1E0 JUMPI JUMPDEST PUSH2 0x1D1 JUMPI PUSH1 0x4 SWAP3 DUP7 SWAP3 PUSH1 0xE0 MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB NOT PUSH0 SLOAD AND OR PUSH0 SSTORE DUP5 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1C7 JUMPI PUSH0 SWAP5 PUSH2 0x18A JUMPI JUMPDEST POP POP PUSH2 0x100 SWAP3 AND DUP3 MSTORE MLOAD PUSH2 0x1237 SWAP2 DUP3 PUSH2 0x2B4 DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 PUSH2 0x118A ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0xAD0 ADD MSTORE DUP2 DUP2 PUSH2 0xF61 ADD MSTORE PUSH2 0xFEA ADD MSTORE PUSH1 0xC0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x54D ADD MSTORE DUP2 DUP2 PUSH2 0x5C2 ADD MSTORE PUSH2 0x108A ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH1 0xAF ADD MSTORE PUSH2 0xBF3 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x3C1 ADD MSTORE DUP2 DUP2 PUSH2 0x424 ADD MSTORE DUP2 DUP2 PUSH2 0x482 ADD MSTORE DUP2 DUP2 PUSH2 0x4C3 ADD MSTORE DUP2 DUP2 PUSH2 0x6D8 ADD MSTORE DUP2 DUP2 PUSH2 0x73B ADD MSTORE DUP2 DUP2 PUSH2 0x799 ADD MSTORE DUP2 DUP2 PUSH2 0x7DB ADD MSTORE PUSH2 0xC2E ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1C0 JUMPI JUMPDEST PUSH2 0x1A2 DUP2 DUP4 PUSH2 0x268 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1BC JUMPI MLOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1BC JUMPI SWAP2 PUSH0 DUP1 PUSH2 0xEF JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x198 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0xD6F1CB05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP4 PUSH1 0xC0 MLOAD AND DUP4 EQ PUSH2 0xB5 JUMP JUMPDEST SWAP3 POP POP POP DUP7 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x21F JUMPI JUMPDEST PUSH2 0x206 DUP2 DUP4 PUSH2 0x268 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1BC JUMPI DUP5 PUSH2 0x219 DUP4 SWAP3 PUSH2 0x29F JUMP JUMPDEST PUSH0 PUSH2 0xAA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1FC JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 SWAP4 POP DUP9 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x261 JUMPI JUMPDEST PUSH2 0x249 DUP2 DUP4 PUSH2 0x268 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1BC JUMPI PUSH2 0x25B DUP6 SWAP3 PUSH2 0x29F JUMP JUMPDEST PUSH0 PUSH2 0x7E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x23F JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x28B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1BC JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x51DA116D EQ PUSH2 0x10AE JUMPI POP DUP2 PUSH4 0x7EA3A964 EQ PUSH2 0x105E JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x100E JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0xFBE JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0xF0E JUMPI DUP2 PUSH4 0xB78B6087 EQ PUSH2 0xA4B JUMPI POP DUP1 PUSH4 0xB8350E27 EQ PUSH2 0xFB JUMPI DUP1 PUSH4 0xD7128084 EQ PUSH2 0xD6 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD3 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xD3 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD3 JUMPI PUSH1 0xFF PUSH1 0x20 SWAP2 SLOAD PUSH1 0xA0 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x83C JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x83C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xA1E JUMPI DUP2 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x14D PUSH1 0x20 DUP5 ADD DUP6 PUSH2 0x111E JUMP JUMPDEST DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP3 DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x873 JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x9F1 JUMPI POP POP POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x9C9 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP2 SLOAD PUSH1 0xFF DUP2 PUSH1 0xA0 SHR AND PUSH2 0x9A1 JUMPI DUP1 PUSH1 0xFF DUP5 SWAP3 PUSH1 0xA8 SHR AND ISZERO PUSH2 0x2AC JUMPI JUMPDEST POP DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x285 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 SLOAD AND SWAP1 PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD MLOAD AND DUP2 EXTCODESIZE ISZERO PUSH2 0x281 JUMPI DUP4 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x874327F00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x276 JUMPI DUP4 SWAP2 PUSH2 0x25E JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1D9 JUMP JUMPDEST PUSH2 0x267 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x272 JUMPI DUP2 PUSH0 PUSH2 0x254 JUMP JUMPDEST POP DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST DUP1 PUSH22 0x1000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 AND OR DUP4 SSTORE AND PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP3 PUSH2 0x969 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 DUP3 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x276 JUMPI DUP4 SWAP3 PUSH2 0x932 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x83C JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE SWAP1 DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP2 PUSH2 0x91E JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x281 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP2 PUSH2 0x90A JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP2 PUSH2 0x8D5 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP3 PUSH2 0x89A JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SLOAD AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x896 JUMPI DUP6 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP2 PUSH2 0x877 JUMPI JUMPDEST POP SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x873 JUMPI DUP5 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP2 PUSH2 0x85F JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x83C JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP2 PUSH2 0x840 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x83C JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0x831 JUMPI ISZERO PUSH2 0x1D6 JUMPI PUSH2 0x826 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x272 JUMPI DUP2 PUSH0 PUSH2 0x1D6 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH2 0x849 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x83C JUMPI DUP3 PUSH0 PUSH2 0x780 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x868 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x83C JUMPI DUP3 PUSH0 PUSH2 0x6BF JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH2 0x880 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x281 JUMPI DUP4 PUSH0 PUSH2 0x659 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST SWAP5 POP SWAP1 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8CD JUMPI JUMPDEST DUP2 PUSH2 0x8B7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI DUP6 SWAP4 MLOAD SWAP1 PUSH0 PUSH2 0x5F2 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8AA JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x902 JUMPI JUMPDEST DUP2 PUSH2 0x8F1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI DUP5 SWAP3 MLOAD PUSH0 PUSH2 0x57D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8E4 JUMP JUMPDEST PUSH2 0x913 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x83C JUMPI DUP3 PUSH0 PUSH2 0x508 JUMP JUMPDEST PUSH2 0x927 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x281 JUMPI DUP4 PUSH0 PUSH2 0x469 JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x961 JUMPI JUMPDEST DUP2 PUSH2 0x94F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI DUP4 SWAP2 MLOAD SWAP1 PUSH0 PUSH2 0x3A9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x942 JUMP JUMPDEST SWAP4 POP SWAP1 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x999 JUMPI JUMPDEST DUP2 PUSH2 0x986 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI SWAP2 MLOAD DUP5 SWAP3 PUSH1 0x20 PUSH2 0x364 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x979 JUMP JUMPDEST PUSH1 0x4 DUP4 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP3 PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x896 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x166 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xA88 SWAP2 AND PUSH2 0x115F JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP3 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP2 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xE1C JUMPI DUP4 SWAP3 DUP7 SWAP3 PUSH0 SWAP3 PUSH2 0xEDC JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE1C JUMPI PUSH0 SWAP2 PUSH2 0xEA6 JUMPI JUMPDEST POP ISZERO PUSH2 0xE7E JUMPI PUSH0 SLOAD PUSH1 0xFF DUP2 PUSH1 0xA0 SHR AND PUSH2 0xE56 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 OR PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP4 PUSH32 0x0 DUP4 AND DUP2 DUP4 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE1C JUMPI PUSH0 SWAP4 PUSH2 0xE27 JUMPI JUMPDEST POP DUP4 PUSH32 0x0 AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x8C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x44 DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0xE1C JUMPI PUSH2 0xE09 JUMPI JUMPDEST POP SWAP6 DUP6 SWAP7 DUP7 SLOAD AND DUP3 EXTCODESIZE ISZERO PUSH2 0xE05 JUMPI PUSH1 0x24 DUP8 SWAP3 DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP2 PUSH2 0xDF1 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 DUP9 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP2 PUSH2 0xDDD JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP3 PUSH2 0xDAC JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 SWAP1 DUP3 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x831 JUMPI PUSH2 0xD97 JUMPI POP RETURN JUMPDEST PUSH2 0xDA0 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0xD3 JUMPI DUP1 RETURN JUMPDEST POP POP POP REVERT JUMPDEST DUP2 SWAP6 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xDD6 JUMPI JUMPDEST PUSH2 0xDC4 DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI DUP4 SWAP3 MLOAD PUSH0 DUP1 PUSH2 0xD62 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xDBA JUMP JUMPDEST PUSH2 0xDE6 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0xDA7 JUMPI DUP4 PUSH0 PUSH2 0xD24 JUMP JUMPDEST PUSH2 0xDFA SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0xDA7 JUMPI DUP4 PUSH0 PUSH2 0xCCF JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0xE14 SWAP2 SWAP7 POP PUSH2 0x10DD JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0xC9D JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xE4F JUMPI JUMPDEST PUSH2 0xE3F DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0xC2A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE35 JUMP JUMPDEST PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xED5 JUMPI JUMPDEST PUSH2 0xEBD DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x8C9 JUMPI PUSH0 PUSH2 0xB54 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEB3 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xF00 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF07 JUMPI JUMPDEST PUSH2 0xEF8 DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11D5 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xB03 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEEE JUMP JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE1C JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF9F JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xFB7 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF07 JUMPI PUSH2 0xEF8 DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF95 JUMP JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x8C9 JUMPI PUSH2 0x1056 PUSH1 0x20 SWAP2 PUSH2 0x115F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10F1 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x8C9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x8C9 JUMPI SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLT JUMPDEST 0xCE 0x21 MSTORE MSIZE 0xEA PUSH1 0xCF GT SWAP1 GASLIMIT DELEGATECALL SWAP3 DIV PUSH7 0x69F9F38F7080A1 0xAC 0xE3 DUP7 EXTCODECOPY 0x2E 0xB3 0xA8 PUSH4 0xB464736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"2282:5362:33:-:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;922:4:23;1347:46:14;;872:14:21;;;;2282:5362:33;;-1:-1:-1;;;3427:33:33;;-1:-1:-1;;;;;2282:5362:33;;;;;872:14:21;;3427:33:33;2282:5362;3427:33;2282:5362;;3427:33;;;;;;;;;;;-1:-1:-1;3427:33:33;;;-1:-1:-1;3408:52:33;;;2282:5362;;;;;;;3593:25;;;;3427:33;3593:25;;;;;;;;;;;;;-1:-1:-1;3593:25:33;;;-1:-1:-1;2282:5362:33;;3593:35;;;:76;;;-1:-1:-1;3589:136:33;;3427:33;3735:14;;;2282:5362;3735:14;2282:5362;;;;;;-1:-1:-1;2282:5362:33;;;-1:-1:-1;2282:5362:33;;;;;;;;;;3845:21;;;;;;;;;-1:-1:-1;3845:21:33;;;-1:-1:-1;3806:62:33;;;2282:5362;;3806:62;;2282:5362;;;;;;;1347:46:14;2282:5362:33;;;;;872:14:21;2282:5362:33;;;;;;;;;;;;;;;3408:52;2282:5362;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3845:21;;;;;;;;;;;;;;;;;:::i;:::-;;;2282:5362;;;;;;;;;;;;3845:21;;;;;2282:5362;-1:-1:-1;2282:5362:33;;3845:21;;;;;;2282:5362;;;-1:-1:-1;2282:5362:33;;;;;3589:136;3692:22;;;-1:-1:-1;3692:22:33;3427:33;-1:-1:-1;3692:22:33;3593:76;2282:5362;;3408:52;2282:5362;;3632:37;;3593:76;;:25;;;;;;;;;;;;;;;;;;:::i;:::-;;;2282:5362;;;;;;;;;:::i;:::-;3593:25;;;;;;;;;2282:5362;;;-1:-1:-1;2282:5362:33;;;;;3427:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;2282:5362;;;;;;;;:::i;:::-;3427:33;;;;;;;;2282:5362;;;;;-1:-1:-1;;2282:5362:33;;;;-1:-1:-1;;;;;2282:5362:33;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;2282:5362:33;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4565,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":4382,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_10033":{"entryPoint":4317,"id":null,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4447,"id":2658,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"2598":[{"length":32,"start":4490}],"4951":[{"length":32,"start":2768},{"length":32,"start":3937},{"length":32,"start":4074}],"9886":[{"length":32,"start":1357},{"length":32,"start":1474},{"length":32,"start":4234}],"9892":[{"length":32,"start":175},{"length":32,"start":3059}],"9895":[{"length":32,"start":961},{"length":32,"start":1060},{"length":32,"start":1154},{"length":32,"start":1219},{"length":32,"start":1752},{"length":32,"start":1851},{"length":32,"start":1945},{"length":32,"start":2011},{"length":32,"start":3118}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f905f358060e01c91826351da116d146110ae575081637ea3a9641461105e578163851c1bb31461100e5781638d928af814610fbe578163aaabadc514610f0e578163b78b608714610a4b57508063b8350e27146100fb578063d7128084146100d65763fbfa77cf14610083575f80fd5b346100d357806003193601126100d357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346100d357806003193601126100d35760ff6020915460a01c166040519015158152f35b50346100d35760206003193601126100d35767ffffffffffffffff60043581811161083c573660238201121561083c578060040135918211610a1e578160051b906040519261014d602084018561111e565b8352602460208401928201019036821161087357602401915b8183106109f1575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6109c95760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d815460ff8160a01c166109a1578060ff849260a81c16156102ac575b50805b82518110156102855773ffffffffffffffffffffffffffffffffffffffff808354169060208360051b8601015116813b156102815783916024839260405194859384927f0874327f00000000000000000000000000000000000000000000000000000000845260048401525af190811561027657839161025e575b50506001016101d9565b610267906110dd565b61027257815f610254565b5080fd5b6040513d85823e3d90fd5b8380fd5b50807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b8075010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff9316178355166040517f851c1bb3000000000000000000000000000000000000000000000000000000008082527f8a3c5c69000000000000000000000000000000000000000000000000000000006004830152602082602481865afa918215610854578492610969575b5060209060246040518095819382527fa93df2a40000000000000000000000000000000000000000000000000000000060048301525afa918215610276578392610932575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561083c576040517f2f2ff15d0000000000000000000000000000000000000000000000000000000080825260048201839052306024830152908481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af190811561088b57859161091e575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561028157604051908152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af190811561085457849161090a575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108545784916108d5575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561088b57859261089a575b5073ffffffffffffffffffffffffffffffffffffffff85541690813b156108965785916024839260405194859384927f8a3c5c6900000000000000000000000000000000000000000000000000000000845260048401525af190811561088b578591610877575b505473ffffffffffffffffffffffffffffffffffffffff1690813b156108735784916024839260405194859384927fa93df2a400000000000000000000000000000000000000000000000000000000845260048401525af190811561085457849161085f575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561083c576040517f36568abe0000000000000000000000000000000000000000000000000000000080825260048201929092523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610854578491610840575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561083c5760405190815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1801561083157156101d657610826906110dd565b61027257815f6101d6565b6040513d84823e3d90fd5b8280fd5b610849906110dd565b61083c57825f610780565b6040513d86823e3d90fd5b610868906110dd565b61083c57825f6106bf565b8480fd5b610880906110dd565b61028157835f610659565b6040513d87823e3d90fd5b8580fd5b945090506020843d6020116108cd575b816108b76020938361111e565b810103126108c957859351905f6105f2565b5f80fd5b3d91506108aa565b9350506020833d602011610902575b816108f16020938361111e565b810103126108c9578492515f61057d565b3d91506108e4565b610913906110dd565b61083c57825f610508565b610927906110dd565b61028157835f610469565b925090506020823d602011610961575b8161094f6020938361111e565b810103126108c957839151905f6103a9565b3d9150610942565b935090506020833d602011610999575b816109866020938361111e565b810103126108c957915184926020610364565b3d9150610979565b6004837fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b6004827f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b823573ffffffffffffffffffffffffffffffffffffffff8116810361089657815260209283019201610166565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b9050346108c9575f6003193601126108c9577fffffffff00000000000000000000000000000000000000000000000000000000610a88911661115f565b9073ffffffffffffffffffffffffffffffffffffffff604051927faaabadc50000000000000000000000000000000000000000000000000000000084526020938481600481867f0000000000000000000000000000000000000000000000000000000000000000165afa8015610e1c57839286925f92610edc575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa908115610e1c575f91610ea6575b5015610e7e575f5460ff8160a01c16610e56577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f2d7713890000000000000000000000000000000000000000000000000000000060048201819052937f000000000000000000000000000000000000000000000000000000000000000083168183602481845afa928315610e1c575f93610e27575b50837f00000000000000000000000000000000000000000000000000000000000000001693843b156108c9576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018590523060248201525f81604481838a5af18015610e1c57610e09575b50958596865416823b15610e055760248792836040519586948593845260048401525af190811561088b578591610df1575b5050823b15610da7576040517f36568abe000000000000000000000000000000000000000000000000000000008082526004820193909352306024820152848160448183885af190811561088b578591610ddd575b50506040517fa217fddf0000000000000000000000000000000000000000000000000000000081528181600481875afa91821561088b578592610dac575b5050823b15610da75760405191825260048201523060248201529082908290604490829084905af1801561083157610d975750f35b610da0906110dd565b6100d35780f35b505050fd5b8195508092503d8311610dd6575b610dc4818361111e565b810103126108c9578392515f80610d62565b503d610dba565b610de6906110dd565b610da757835f610d24565b610dfa906110dd565b610da757835f610ccf565b8680fd5b610e149196506110dd565b5f945f610c9d565b6040513d5f823e3d90fd5b9092508181813d8311610e4f575b610e3f818361111e565b810103126108c95751915f610c2a565b503d610e35565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90508381813d8311610ed5575b610ebd818361111e565b810103126108c9575180151581036108c9575f610b54565b503d610eb3565b6064919250610f0090843d8611610f07575b610ef8818361111e565b8101906111d5565b9190610b03565b503d610eee565b346108c9575f6003193601126108c9576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610e1c576020925f92610f9f575b5060405191168152f35b610fb7919250833d8511610f0757610ef8818361111e565b9083610f95565b346108c9575f6003193601126108c957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346108c95760206003193601126108c9576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036108c95761105660209161115f565b604051908152f35b346108c9575f6003193601126108c957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346108c9575f6003193601126108c95760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b67ffffffffffffffff81116110f157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110f157604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176110f15760405251902090565b908160209103126108c9575173ffffffffffffffffffffffffffffffffffffffff811681036108c9579056fea2646970667358221220125bce215259ea60cf119045f492046669f9f38f7080a1ace3863c2eb3a863b464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x51DA116D EQ PUSH2 0x10AE JUMPI POP DUP2 PUSH4 0x7EA3A964 EQ PUSH2 0x105E JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x100E JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0xFBE JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0xF0E JUMPI DUP2 PUSH4 0xB78B6087 EQ PUSH2 0xA4B JUMPI POP DUP1 PUSH4 0xB8350E27 EQ PUSH2 0xFB JUMPI DUP1 PUSH4 0xD7128084 EQ PUSH2 0xD6 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x83 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD3 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xD3 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD3 JUMPI PUSH1 0xFF PUSH1 0x20 SWAP2 SLOAD PUSH1 0xA0 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x83C JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x83C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xA1E JUMPI DUP2 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x14D PUSH1 0x20 DUP5 ADD DUP6 PUSH2 0x111E JUMP JUMPDEST DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP3 DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x873 JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x9F1 JUMPI POP POP POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x9C9 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP2 SLOAD PUSH1 0xFF DUP2 PUSH1 0xA0 SHR AND PUSH2 0x9A1 JUMPI DUP1 PUSH1 0xFF DUP5 SWAP3 PUSH1 0xA8 SHR AND ISZERO PUSH2 0x2AC JUMPI JUMPDEST POP DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x285 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 SLOAD AND SWAP1 PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD MLOAD AND DUP2 EXTCODESIZE ISZERO PUSH2 0x281 JUMPI DUP4 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x874327F00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x276 JUMPI DUP4 SWAP2 PUSH2 0x25E JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x1D9 JUMP JUMPDEST PUSH2 0x267 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x272 JUMPI DUP2 PUSH0 PUSH2 0x254 JUMP JUMPDEST POP DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST DUP1 PUSH22 0x1000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 AND OR DUP4 SSTORE AND PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP3 PUSH2 0x969 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 DUP3 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x276 JUMPI DUP4 SWAP3 PUSH2 0x932 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x83C JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE SWAP1 DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP2 PUSH2 0x91E JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x281 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP2 PUSH2 0x90A JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP2 PUSH2 0x8D5 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP3 PUSH2 0x89A JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SLOAD AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x896 JUMPI DUP6 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP2 PUSH2 0x877 JUMPI JUMPDEST POP SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x873 JUMPI DUP5 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP2 PUSH2 0x85F JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x83C JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x854 JUMPI DUP5 SWAP2 PUSH2 0x840 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x83C JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0x831 JUMPI ISZERO PUSH2 0x1D6 JUMPI PUSH2 0x826 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x272 JUMPI DUP2 PUSH0 PUSH2 0x1D6 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH2 0x849 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x83C JUMPI DUP3 PUSH0 PUSH2 0x780 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x868 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x83C JUMPI DUP3 PUSH0 PUSH2 0x6BF JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH2 0x880 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x281 JUMPI DUP4 PUSH0 PUSH2 0x659 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST SWAP5 POP SWAP1 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x8CD JUMPI JUMPDEST DUP2 PUSH2 0x8B7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI DUP6 SWAP4 MLOAD SWAP1 PUSH0 PUSH2 0x5F2 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8AA JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x902 JUMPI JUMPDEST DUP2 PUSH2 0x8F1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI DUP5 SWAP3 MLOAD PUSH0 PUSH2 0x57D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x8E4 JUMP JUMPDEST PUSH2 0x913 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x83C JUMPI DUP3 PUSH0 PUSH2 0x508 JUMP JUMPDEST PUSH2 0x927 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0x281 JUMPI DUP4 PUSH0 PUSH2 0x469 JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x961 JUMPI JUMPDEST DUP2 PUSH2 0x94F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI DUP4 SWAP2 MLOAD SWAP1 PUSH0 PUSH2 0x3A9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x942 JUMP JUMPDEST SWAP4 POP SWAP1 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x999 JUMPI JUMPDEST DUP2 PUSH2 0x986 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI SWAP2 MLOAD DUP5 SWAP3 PUSH1 0x20 PUSH2 0x364 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x979 JUMP JUMPDEST PUSH1 0x4 DUP4 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP3 PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x896 JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x166 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xA88 SWAP2 AND PUSH2 0x115F JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP3 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP2 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xE1C JUMPI DUP4 SWAP3 DUP7 SWAP3 PUSH0 SWAP3 PUSH2 0xEDC JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE1C JUMPI PUSH0 SWAP2 PUSH2 0xEA6 JUMPI JUMPDEST POP ISZERO PUSH2 0xE7E JUMPI PUSH0 SLOAD PUSH1 0xFF DUP2 PUSH1 0xA0 SHR AND PUSH2 0xE56 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 OR PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP4 PUSH32 0x0 DUP4 AND DUP2 DUP4 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE1C JUMPI PUSH0 SWAP4 PUSH2 0xE27 JUMPI JUMPDEST POP DUP4 PUSH32 0x0 AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x8C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x44 DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0xE1C JUMPI PUSH2 0xE09 JUMPI JUMPDEST POP SWAP6 DUP6 SWAP7 DUP7 SLOAD AND DUP3 EXTCODESIZE ISZERO PUSH2 0xE05 JUMPI PUSH1 0x24 DUP8 SWAP3 DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP2 PUSH2 0xDF1 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 DUP9 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP2 PUSH2 0xDDD JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x88B JUMPI DUP6 SWAP3 PUSH2 0xDAC JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xDA7 JUMPI PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 SWAP1 DUP3 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x831 JUMPI PUSH2 0xD97 JUMPI POP RETURN JUMPDEST PUSH2 0xDA0 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0xD3 JUMPI DUP1 RETURN JUMPDEST POP POP POP REVERT JUMPDEST DUP2 SWAP6 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xDD6 JUMPI JUMPDEST PUSH2 0xDC4 DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI DUP4 SWAP3 MLOAD PUSH0 DUP1 PUSH2 0xD62 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xDBA JUMP JUMPDEST PUSH2 0xDE6 SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0xDA7 JUMPI DUP4 PUSH0 PUSH2 0xD24 JUMP JUMPDEST PUSH2 0xDFA SWAP1 PUSH2 0x10DD JUMP JUMPDEST PUSH2 0xDA7 JUMPI DUP4 PUSH0 PUSH2 0xCCF JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0xE14 SWAP2 SWAP7 POP PUSH2 0x10DD JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0xC9D JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xE4F JUMPI JUMPDEST PUSH2 0xE3F DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0xC2A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE35 JUMP JUMPDEST PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xED5 JUMPI JUMPDEST PUSH2 0xEBD DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x8C9 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x8C9 JUMPI PUSH0 PUSH2 0xB54 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEB3 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xF00 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF07 JUMPI JUMPDEST PUSH2 0xEF8 DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x11D5 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xB03 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xEEE JUMP JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE1C JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF9F JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xFB7 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF07 JUMPI PUSH2 0xEF8 DUP2 DUP4 PUSH2 0x111E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF95 JUMP JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x8C9 JUMPI PUSH2 0x1056 PUSH1 0x20 SWAP2 PUSH2 0x115F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x8C9 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x8C9 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10F1 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x8C9 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x8C9 JUMPI SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLT JUMPDEST 0xCE 0x21 MSTORE MSIZE 0xEA PUSH1 0xCF GT SWAP1 GASLIMIT DELEGATECALL SWAP3 DIV PUSH7 0x69F9F38F7080A1 0xAC 0xE3 DUP7 EXTCODECOPY 0x2E 0xB3 0xA8 PUSH4 0xB464736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"2282:5362:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1424:26:23;2282:5362:33;1424:26:23;;;2282:5362:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2282:5362:33;;;;;;;;;2496:29;2282:5362;;;;;;;;;;;;;-1:-1:-1;;2282:5362:33;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2282:5362:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2806:53:20;;;551:66:19;2806:53:20;1316:93:19;;1529:4;551:66;3051:52:20;2282:5362:33;;;;;;;4645:76;;2282:5362;;;;;;;;4815:141;;2282:5362;5458:13;;5491:3;2282:5362;;5473:16;;;;;2282:5362;;;;;;;;;;;;;;;5571:70;;;;;2282:5362;;;;;;;5571:70;;;;;2282:5362;5571:70;;2282:5362;5571:70;;2282:5362;5571:70;;;;;;;;;;;5491:3;;;1529:4:19;2282:5362:33;5458:13;;5571:70;;;;:::i;:::-;2282:5362;;5571:70;;;;2282:5362;;;;5571:70;2282:5362;;;;;;;;;5571:70;2282:5362;;;5473:16;;3051:52:20;551:66:19;3051:52:20;2282:5362:33;;4815:141;2282:5362;;;;;;;;;;;;;6208:144;;;6276:66;2282:5362;6208:144;;2282:5362;;6208:144;2282:5362;6208:144;;;;;;;;;;;;;4815:141;2282:5362;;;;;;6386:145;;;;;;6454:67;2282:5362;6386:145;;2282:5362;6386:145;;;;;;;;;;;4815:141;6542:11;2282:5362;6542:11;2282:5362;6542:49;;;;2282:5362;;;6542:49;;;2282:5362;6542:49;;2282:5362;;;6585:4;2282:5362;;;;;6585:4;2282:5362;;;6585:4;6542:11;2282:5362;;6542:49;;;;;;;;;;;4815:141;6542:11;;2282:5362;6542:11;2282:5362;6601:50;;;;2282:5362;;6601:50;;;2282:5362;6601:50;;2282:5362;;;6585:4;2282:5362;;;;6585:4;2282:5362;;;6585:4;6542:11;2282:5362;;6601:50;;;;;;;;;;;4815:141;2282:5362;;;;;6743:53;;2282:5362;6743:16;2282:5362;6743:16;2282:5362;6743:16;2282:5362;6743:53;;;;;;;;;;;4815:141;2282:5362;;;6841:54;2282:5362;6841:54;;2282:5362;6743:16;2282:5362;6743:16;2282:5362;6743:16;2282:5362;6841:54;;;;;;;;;;;4815:141;2282:5362;;;;;6906:76;;;;;;2282:5362;;;;;;;6906:76;;;;;6276:66;6906:76;;2282:5362;6906:76;;2282:5362;6906:76;;;;;;;;;;;4815:141;-1:-1:-1;2282:5362:33;;;;6992:78;;;;;2282:5362;;;;;;;6992:78;;;;;6454:67;6992:78;;2282:5362;6992:78;;2282:5362;6992:78;;;;;;;;;;;4815:141;6542:11;;2282:5362;6542:11;2282:5362;7112:52;;;;2282:5362;;;7112:52;;;2282:5362;7112:52;;2282:5362;;;;6585:4;2282:5362;;;;;;;;;6542:11;2282:5362;;7112:52;;;;;;;;;;;4815:141;6542:11;;2282:5362;6542:11;2282:5362;7174:53;;;;2282:5362;;7174:53;;;2282:5362;7174:53;;2282:5362;;;;6585:4;2282:5362;;;;;;;;;6542:11;2282:5362;;7174:53;;;;;;;4815:141;7174:53;;;;:::i;:::-;2282:5362;;7174:53;;4815:141;;7174:53;2282:5362;;;;;;;;;7174:53;2282:5362;;;7112:52;;;;:::i;:::-;2282:5362;;7112:52;;;;;2282:5362;;;;;;;;;6992:78;;;;:::i;:::-;2282:5362;;6992:78;;;;;2282:5362;;;6906:76;;;;:::i;:::-;2282:5362;;6906:76;;;;;2282:5362;;;;;;;;;6906:76;2282:5362;;;6841:54;;;;;2282:5362;6841:54;;2282:5362;6841:54;;;;;;2282:5362;6841:54;;;:::i;:::-;;;2282:5362;;;;;;;6841:54;;;;2282:5362;;;;6841:54;;;-1:-1:-1;6841:54:33;;6743:53;;;;2282:5362;6743:53;;2282:5362;6743:53;;;;;;2282:5362;6743:53;;;:::i;:::-;;;2282:5362;;;;;;;6743:53;;;;;;-1:-1:-1;6743:53:33;;6601:50;;;;:::i;:::-;2282:5362;;6601:50;;;;6542:49;;;;:::i;:::-;2282:5362;;6542:49;;;;6386:145;;;;;2282:5362;6386:145;;2282:5362;6386:145;;;;;;2282:5362;6386:145;;;:::i;:::-;;;2282:5362;;;;;;;6386:145;;;;;;;-1:-1:-1;6386:145:33;;6208:144;;;;;2282:5362;6208:144;;2282:5362;6208:144;;;;;;2282:5362;6208:144;;;:::i;:::-;;;2282:5362;;;;;;;;;6208:144;;;;;-1:-1:-1;6208:144:33;;4645:76;2282:5362;4693:17;;;;;1316:93:19;2282:5362:33;1368:30:19;;;;;2282:5362:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2282:5362:33;;;;;1774:7:14;1762:20;1774:7;;1762:20;:::i;:::-;2282:5362:33;;;;1180:22:21;2282:5362:33;1180:22:21;;;:6;;;2282:5362:33;1180:6:21;;;2282:5362:33;1180:22:21;;;;;;;;;;2282:5362:33;1180:22:21;;;2282:5362:33;;;;;;1180:64:21;;;;;2282:5362:33;1180:64:21;;2282:5362:33;1180:64:21;;2282:5362:33;1820:10:14;2282:5362:33;;;;1238:4:21;2282:5362:33;;;;;1180:64:21;;;;;;;2282:5362:33;1180:64:21;;;2282:5362:33;1797:34:14;;1793:90;;2282:5362:33;;;;;;;5733:76;;2282:5362;;;;;;;;;7323:112;;7380:45;2282:5362;7323:112;;2282:5362;;;7380:45;7347:5;2282:5362;;;;;;;7323:112;;;;;;;2282:5362;7323:112;;;2282:5362;7446:11;;;2282:5362;7446:58;;;;;;2282:5362;;;7446:58;;2282:5362;7446:58;;2282:5362;;;1238:4:21;2282:5362:33;;;;-1:-1:-1;2282:5362:33;;;-1:-1:-1;7446:58:33;;;;;;;;;2282:5362;;;;;;;;7515:48;;;;;2282:5362;;;;;;7515:48;;;;;;;2282:5362;7515:48;;2282:5362;7515:48;;;;;;;;;;;2282:5362;7574:61;;;;;;;2282:5362;;;7574:61;;;2282:5362;7574:61;;2282:5362;;;;1238:4:21;2282:5362:33;;;;;;;;;7574:61;;;;;;;;;;;;2282:5362;;;;;;5992:32;;;;2282:5362;5992:32;;;;;;;;;;;;;2282:5362;5967:73;;;;;;;2282:5362;;5967:73;;;2282:5362;5967:73;;2282:5362;1238:4:21;2282:5362:33;;;;;;;;;;;;;;;5967:73;;;;;;;;2282:5362;;5967:73;;;;:::i;:::-;2282:5362;;5967:73;2282:5362;5967:73;2282:5362;;;;5992:32;;;;;;;;;;;;;;;;;:::i;:::-;;;2282:5362;;;;;;;5992:32;;;;;;;;;7574:61;;;;:::i;:::-;2282:5362;;7574:61;;;;7515:48;;;;:::i;:::-;2282:5362;;7515:48;;;;;2282:5362;;;7446:58;;;;;;:::i;:::-;2282:5362;7446:58;;;;;2282:5362;;;;;;;;;7323:112;;;;;;;;;;;;;;;;;:::i;:::-;;;2282:5362;;;;;7323:112;;;;;;;;;5733:76;5781:17;2282:5362;5781:17;2282:5362;;5781:17;1793:90:14;1854:18;2282:5362:33;1854:18:14;2282:5362:33;;1854:18:14;1180:64:21;;;;;;;;;;;;;;;;:::i;:::-;;;2282:5362:33;;;;;;;;;;;;1180:64:21;;;;;;;;:22;2282:5362:33;1180:22:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2282:5362:33;;;;;-1:-1:-1;;2282:5362:33;;;;;;;;1424:26:23;;2282:5362:33;1424:26:23;2282:5362:33;;;968:6:21;2282:5362:33;;1424:26:23;;;;;;;;;2282:5362:33;1424:26:23;;;2282:5362:33;;;;;;;;;1424:26:23;;;;;;;;;;;;;;;:::i;:::-;;;;;2282:5362:33;;;;;-1:-1:-1;;2282:5362:33;;;;;;;;;968:6:21;2282:5362:33;;;;;;;;;-1:-1:-1;;2282:5362:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;2282:5362:33;;;;;;;;;2381:56;2282:5362;;;;;;;;;-1:-1:-1;;2282:5362:33;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1931:430:14:-;2282:5362:33;;;2303:50:14;;;2320:22;;2282:5362:33;;;;;;;2303:50:14;;;2282:5362:33;;;;;;;;;;;;;;;2293:61:14;;1931:430;:::o;2282:5362:33:-;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"finalizeMigration()":"b78b6087","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8","isMigrationComplete()":"d7128084","migratePools(address[])":"b8350e27","newFeeController()":"51da116d","oldFeeController()":"7ea3a964","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"_newFeeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeController\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"finalizeMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isMigrationComplete\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"migratePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oldFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are initially turned off). After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible there might be too many to migrate in a single call. The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator system of v2 just yet. When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to prevent premature termination in case multiple transactions are required to migrate all the pools. Associated with `20250221-protocol-fee-controller-migration` (fork test only).\",\"errors\":{\"InvalidFeeController()\":[{\"details\":\"ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both the old and new controllers reference the same vault.\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isMigrationComplete()\":{\"details\":\"It can only be done once.\",\"returns\":{\"_0\":\"isComplete True if `finalizeMigration` has been called.\"}},\"migratePools(address[])\":{\"details\":\"This can be called multiple times, if there are too many pools for a single transaction. Note that the first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\",\"params\":{\"pools\":\"The set of pools to be migrated in this call\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyMigrated()\":[{\"notice\":\"Migration can only be performed once.\"}],\"InvalidFeeController()\":[{\"notice\":\"Attempt to deploy this contract with invalid parameters.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isMigrationComplete()\":{\"notice\":\"Check whether migration has been completed.\"},\"migratePools(address[])\":{\"notice\":\"Migrate pools from the old fee controller to the new one.\"}},\"notice\":\"Migrate to a ProtocolFeeController with extra events and infrastructure for future migrations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeControllerMigration.sol\":\"ProtocolFeeControllerMigration\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0x2b001b0e402cb94f135c49e40cec96138e3842db5b2b1f46b1bb8d34abe1eecb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5d4336b62b3919e0fbd5e0f3ff2f29e1056c07b4c62c742797003733404416e2\",\"dweb:/ipfs/QmbQqFz4DPBcEEaHAV5HbB5aAQkSw4JZtck1fJCJrmbpw2\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x4e6eceea41f31faa3f4228315c1d54c0d6f7befaaa1d158775e0b2a860c9de12\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6fc6d998ca7860d5c8f08a4fc045d5d1ebdcb4c777e934f6cd081d05252a024f\",\"dweb:/ipfs/QmbsPGHVrBdVfpcWkm3BNWPQXUZWbvPb6VGiEbf5ezvAmj\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/ProtocolFeeControllerMigration.sol\":{\"keccak256\":\"0xaae2aa9dea8a337f20cf97202e2f397763a96191ce5301ee9a3320556ac96f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://765384c3d9d13a2a20df396a73969d49deff80c235a959647b9f863ab1057dac\",\"dweb:/ipfs/QmV3jk1gVuGoueUWKvrNvveiGD8JFFNpu42yX2PCNQM5fh\"]}},\"version\":1}"}}}}} \ No newline at end of file