{"abi":[{"type":"error","name":"SafeERC20FailedDecreaseAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"currentAllowance","type":"uint256","internalType":"uint256"},{"name":"requestedDecrease","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c634300081a000a","sourceMap":"730:5018:90:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;730:5018:90;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c634300081a000a","sourceMap":"730:5018:90:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"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\":{\"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{\"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker\":\"0x4200000000000000000000000000000000000776\"},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@lib-keccak/=lib/lib-keccak/contracts/lib/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":@solady-test/=lib/lib-keccak/lib/solady/test/\",\":@solady/=lib/solady/src/\",\":automate/=lib/automate/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gelato/=lib/automate/contracts/\",\":hardhat/=lib/automate/node_modules/hardhat/\",\":kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/\",\":lib-keccak/=lib/lib-keccak/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/\",\":openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/\",\":prb-test/=lib/automate/lib/prb-test/src/\",\":prb/-est/=lib/automate/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/contracts/\",\":solady/=lib/solady/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"src/tokamak-contracts/USDC/L1/libraries/Address.sol\":{\"keccak256\":\"0x7a2becd0fc138ccd81f63dc85f73aa43ac9e16107b1060dfb9bfcbc46e089060\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9cfc1478aba538118b63dca8c71983d8d522b9ac97b96364ae27dc505b675a3\",\"dweb:/ipfs/QmQJnCRPn61XoPbDtykyGGcXS4YYydmMCxcWDymhBTG6JJ\"]},\"src/tokamak-contracts/USDC/L1/libraries/IERC20.sol\":{\"keccak256\":\"0x32fc81940e398095a082754088b43bcd70dda770a819586abc34fe8b387a42b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e2c83e48dbd6c4576400811d11eccbbe8dd44d652fdbaabab22b6fa1188bba\",\"dweb:/ipfs/QmZkWkDCQGwJH44EN61jov9MY34qg15WYtAvJYvkSJusx4\"]},\"src/tokamak-contracts/USDC/L1/libraries/IERC20Permit.sol\":{\"keccak256\":\"0x38fa29834657581cb1cdb1a18762bf9f730e7f68523d63fb181606f6bea7b173\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d2fa77781be9fa115f4837d80d431761f4af463c3dbd9d5b103a4e2dcf8eee1\",\"dweb:/ipfs/QmSHYchPnZBddirEAa5wnGUgFVnBfq6v9gVJ4wdrtYxsrc\"]},\"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol\":{\"keccak256\":\"0x1b796214de865837b31080bf4286131652925a25e206d11c1b870ea267742bae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e527f3891bbc917742346bb4cc230893bbf68eb925d2f0c70b475f3b901b3dd\",\"dweb:/ipfs/QmNeJTgxQKX7zvRCGYA81SJRMjkxcNEdemFcqpZsWJ4q9s\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"type":"error","name":"SafeERC20FailedDecreaseAllowance"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"type":"error","name":"SafeERC20FailedOperation"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@lib-keccak/=lib/lib-keccak/contracts/lib/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","@openzeppelin/contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/contracts/","@rari-capital/solmate/=lib/solmate/","@solady-test/=lib/lib-keccak/lib/solady/test/","@solady/=lib/solady/src/","automate/=lib/automate/contracts/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts_v5.0.1/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gelato/=lib/automate/contracts/","hardhat/=lib/automate/node_modules/hardhat/","kontrol-cheatcodes/=lib/kontrol-cheatcodes/src/","lib-keccak/=lib/lib-keccak/contracts/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-contracts_v3.1.0/=lib/openzeppelin-contracts_v3.1.0/contracts/","openzeppelin-contracts_v5.0.1/=lib/openzeppelin-contracts_v5.0.1/","prb-test/=lib/automate/lib/prb-test/src/","prb/-est/=lib/automate/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/contracts/","solady/=lib/solady/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":999999},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol":"SafeERC20"},"evmVersion":"cancun","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"src/tokamak-contracts/USDC/L1/libraries/Address.sol":{"keccak256":"0x7a2becd0fc138ccd81f63dc85f73aa43ac9e16107b1060dfb9bfcbc46e089060","urls":["bzz-raw://a9cfc1478aba538118b63dca8c71983d8d522b9ac97b96364ae27dc505b675a3","dweb:/ipfs/QmQJnCRPn61XoPbDtykyGGcXS4YYydmMCxcWDymhBTG6JJ"],"license":"MIT"},"src/tokamak-contracts/USDC/L1/libraries/IERC20.sol":{"keccak256":"0x32fc81940e398095a082754088b43bcd70dda770a819586abc34fe8b387a42b4","urls":["bzz-raw://59e2c83e48dbd6c4576400811d11eccbbe8dd44d652fdbaabab22b6fa1188bba","dweb:/ipfs/QmZkWkDCQGwJH44EN61jov9MY34qg15WYtAvJYvkSJusx4"],"license":"MIT"},"src/tokamak-contracts/USDC/L1/libraries/IERC20Permit.sol":{"keccak256":"0x38fa29834657581cb1cdb1a18762bf9f730e7f68523d63fb181606f6bea7b173","urls":["bzz-raw://4d2fa77781be9fa115f4837d80d431761f4af463c3dbd9d5b103a4e2dcf8eee1","dweb:/ipfs/QmSHYchPnZBddirEAa5wnGUgFVnBfq6v9gVJ4wdrtYxsrc"],"license":"MIT"},"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol":{"keccak256":"0x1b796214de865837b31080bf4286131652925a25e206d11c1b870ea267742bae","urls":["bzz-raw://1e527f3891bbc917742346bb4cc230893bbf68eb925d2f0c70b475f3b901b3dd","dweb:/ipfs/QmNeJTgxQKX7zvRCGYA81SJRMjkxcNEdemFcqpZsWJ4q9s"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user"},"devdoc":{"version":1,"kind":"dev","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."}]},"title":"SafeERC20"},"ast":{"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/SafeERC20.sol","id":60073,"exportedSymbols":{"Address":[59281],"IERC20":[59710],"IERC20Permit":[59746],"SafeERC20":[60072]},"nodeType":"SourceUnit","src":"115:5634:90","nodes":[{"id":59784,"nodeType":"PragmaDirective","src":"115:23:90","nodes":[],"literals":["solidity","^","0.8",".0"]},{"id":59786,"nodeType":"ImportDirective","src":"140:38:90","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/IERC20.sol","file":"./IERC20.sol","nameLocation":"-1:-1:-1","scope":60073,"sourceUnit":59711,"symbolAliases":[{"foreign":{"id":59785,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59710,"src":"149:6:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":59788,"nodeType":"ImportDirective","src":"179:50:90","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/IERC20Permit.sol","file":"./IERC20Permit.sol","nameLocation":"-1:-1:-1","scope":60073,"sourceUnit":59747,"symbolAliases":[{"foreign":{"id":59787,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59746,"src":"188:12:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":59790,"nodeType":"ImportDirective","src":"230:40:90","nodes":[],"absolutePath":"src/tokamak-contracts/USDC/L1/libraries/Address.sol","file":"./Address.sol","nameLocation":"-1:-1:-1","scope":60073,"sourceUnit":59282,"symbolAliases":[{"foreign":{"id":59789,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59281,"src":"239:7:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60072,"nodeType":"ContractDefinition","src":"730:5018:90","nodes":[{"id":59794,"nodeType":"UsingForDirective","src":"754:26:90","nodes":[],"global":false,"libraryName":{"id":59792,"name":"Address","nameLocations":["760:7:90"],"nodeType":"IdentifierPath","referencedDeclaration":59281,"src":"760:7:90"},"typeName":{"id":59793,"name":"address","nodeType":"ElementaryTypeName","src":"772:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":59799,"nodeType":"ErrorDefinition","src":"855:46:90","nodes":[],"documentation":{"id":59795,"nodeType":"StructuredDocumentation","src":"786:64:90","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","name":"SafeERC20FailedOperation","nameLocation":"861:24:90","parameters":{"id":59798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59797,"mutability":"mutable","name":"token","nameLocation":"894:5:90","nodeType":"VariableDeclaration","scope":59799,"src":"886:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59796,"name":"address","nodeType":"ElementaryTypeName","src":"886:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"885:15:90"}},{"id":59808,"nodeType":"ErrorDefinition","src":"983:109:90","nodes":[],"documentation":{"id":59800,"nodeType":"StructuredDocumentation","src":"907:71:90","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","name":"SafeERC20FailedDecreaseAllowance","nameLocation":"989:32:90","parameters":{"id":59807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59802,"mutability":"mutable","name":"spender","nameLocation":"1030:7:90","nodeType":"VariableDeclaration","scope":59808,"src":"1022:15:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59801,"name":"address","nodeType":"ElementaryTypeName","src":"1022:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59804,"mutability":"mutable","name":"currentAllowance","nameLocation":"1047:16:90","nodeType":"VariableDeclaration","scope":59808,"src":"1039:24:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59803,"name":"uint256","nodeType":"ElementaryTypeName","src":"1039:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":59806,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1073:17:90","nodeType":"VariableDeclaration","scope":59808,"src":"1065:25:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59805,"name":"uint256","nodeType":"ElementaryTypeName","src":"1065:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1021:70:90"}},{"id":59832,"nodeType":"FunctionDefinition","src":"1282:160:90","nodes":[],"body":{"id":59831,"nodeType":"Block","src":"1354:88:90","nodes":[],"statements":[{"expression":{"arguments":[{"id":59820,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59812,"src":"1384:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":59823,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59812,"src":"1406:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1412:8:90","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":59677,"src":"1406:14:90","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":59825,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59814,"src":"1423:2:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59816,"src":"1427:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":59827,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1422:11:90","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":59821,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1391:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":59822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1395:10:90","memberName":"encodeCall","nodeType":"MemberAccess","src":"1391:14:90","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":59828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1391:43:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59819,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60022,"src":"1364:19:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":59829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1364:71:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59830,"nodeType":"ExpressionStatement","src":"1364:71:90"}]},"documentation":{"id":59809,"nodeType":"StructuredDocumentation","src":"1098:179:90","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1291:12:90","parameters":{"id":59817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59812,"mutability":"mutable","name":"token","nameLocation":"1311:5:90","nodeType":"VariableDeclaration","scope":59832,"src":"1304:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59811,"nodeType":"UserDefinedTypeName","pathNode":{"id":59810,"name":"IERC20","nameLocations":["1304:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"1304:6:90"},"referencedDeclaration":59710,"src":"1304:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59814,"mutability":"mutable","name":"to","nameLocation":"1326:2:90","nodeType":"VariableDeclaration","scope":59832,"src":"1318:10:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59813,"name":"address","nodeType":"ElementaryTypeName","src":"1318:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59816,"mutability":"mutable","name":"value","nameLocation":"1338:5:90","nodeType":"VariableDeclaration","scope":59832,"src":"1330:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59815,"name":"uint256","nodeType":"ElementaryTypeName","src":"1330:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1303:41:90"},"returnParameters":{"id":59818,"nodeType":"ParameterList","parameters":[],"src":"1354:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59859,"nodeType":"FunctionDefinition","src":"1681:188:90","nodes":[],"body":{"id":59858,"nodeType":"Block","src":"1771:98:90","nodes":[],"statements":[{"expression":{"arguments":[{"id":59846,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59836,"src":"1801:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":59849,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59836,"src":"1823:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1829:12:90","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":59709,"src":"1823:18:90","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":59851,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59838,"src":"1844:4:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59852,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59840,"src":"1850:2:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59853,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59842,"src":"1854:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":59854,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1843:17:90","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":59847,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1808:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":59848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1812:10:90","memberName":"encodeCall","nodeType":"MemberAccess","src":"1808:14:90","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":59855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1808:53:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59845,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60022,"src":"1781:19:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":59856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1781:81:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59857,"nodeType":"ExpressionStatement","src":"1781:81:90"}]},"documentation":{"id":59833,"nodeType":"StructuredDocumentation","src":"1448:228:90","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1690:16:90","parameters":{"id":59843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59836,"mutability":"mutable","name":"token","nameLocation":"1714:5:90","nodeType":"VariableDeclaration","scope":59859,"src":"1707:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59835,"nodeType":"UserDefinedTypeName","pathNode":{"id":59834,"name":"IERC20","nameLocations":["1707:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"1707:6:90"},"referencedDeclaration":59710,"src":"1707:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59838,"mutability":"mutable","name":"from","nameLocation":"1729:4:90","nodeType":"VariableDeclaration","scope":59859,"src":"1721:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59837,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59840,"mutability":"mutable","name":"to","nameLocation":"1743:2:90","nodeType":"VariableDeclaration","scope":59859,"src":"1735:10:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59839,"name":"address","nodeType":"ElementaryTypeName","src":"1735:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59842,"mutability":"mutable","name":"value","nameLocation":"1755:5:90","nodeType":"VariableDeclaration","scope":59859,"src":"1747:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59841,"name":"uint256","nodeType":"ElementaryTypeName","src":"1747:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1706:55:90"},"returnParameters":{"id":59844,"nodeType":"ParameterList","parameters":[],"src":"1771:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59890,"nodeType":"FunctionDefinition","src":"2060:225:90","nodes":[],"body":{"id":59889,"nodeType":"Block","src":"2146:139:90","nodes":[],"statements":[{"assignments":[59871],"declarations":[{"constant":false,"id":59871,"mutability":"mutable","name":"oldAllowance","nameLocation":"2164:12:90","nodeType":"VariableDeclaration","scope":59889,"src":"2156:20:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59870,"name":"uint256","nodeType":"ElementaryTypeName","src":"2156:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59880,"initialValue":{"arguments":[{"arguments":[{"id":59876,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2203:4:90","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$60072","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$60072","typeString":"library SafeERC20"}],"id":59875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2195:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59874,"name":"address","nodeType":"ElementaryTypeName","src":"2195:7:90","typeDescriptions":{}}},"id":59877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2195:13:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59878,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59865,"src":"2210:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":59872,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59863,"src":"2179:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2185:9:90","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":59687,"src":"2179:15:90","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":59879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2179:39:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2156:62:90"},{"expression":{"arguments":[{"id":59882,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59863,"src":"2241:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"id":59883,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59865,"src":"2248:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59884,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59871,"src":"2257:12:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":59885,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59867,"src":"2272:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2257:20:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59881,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59980,"src":"2228:12:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":59887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2228:50:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59888,"nodeType":"ExpressionStatement","src":"2228:50:90"}]},"documentation":{"id":59860,"nodeType":"StructuredDocumentation","src":"1875:180:90","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2069:21:90","parameters":{"id":59868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59863,"mutability":"mutable","name":"token","nameLocation":"2098:5:90","nodeType":"VariableDeclaration","scope":59890,"src":"2091:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59862,"nodeType":"UserDefinedTypeName","pathNode":{"id":59861,"name":"IERC20","nameLocations":["2091:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"2091:6:90"},"referencedDeclaration":59710,"src":"2091:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59865,"mutability":"mutable","name":"spender","nameLocation":"2113:7:90","nodeType":"VariableDeclaration","scope":59890,"src":"2105:15:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59864,"name":"address","nodeType":"ElementaryTypeName","src":"2105:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59867,"mutability":"mutable","name":"value","nameLocation":"2130:5:90","nodeType":"VariableDeclaration","scope":59890,"src":"2122:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59866,"name":"uint256","nodeType":"ElementaryTypeName","src":"2122:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2090:46:90"},"returnParameters":{"id":59869,"nodeType":"ParameterList","parameters":[],"src":"2146:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59933,"nodeType":"FunctionDefinition","src":"2488:468:90","nodes":[],"body":{"id":59932,"nodeType":"Block","src":"2586:370:90","nodes":[],"statements":[{"id":59931,"nodeType":"UncheckedBlock","src":"2596:354:90","statements":[{"assignments":[59902],"declarations":[{"constant":false,"id":59902,"mutability":"mutable","name":"currentAllowance","nameLocation":"2628:16:90","nodeType":"VariableDeclaration","scope":59931,"src":"2620:24:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59901,"name":"uint256","nodeType":"ElementaryTypeName","src":"2620:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59911,"initialValue":{"arguments":[{"arguments":[{"id":59907,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2671:4:90","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$60072","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$60072","typeString":"library SafeERC20"}],"id":59906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2663:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59905,"name":"address","nodeType":"ElementaryTypeName","src":"2663:7:90","typeDescriptions":{}}},"id":59908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2663:13:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59909,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59896,"src":"2678:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":59903,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59894,"src":"2647:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2653:9:90","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":59687,"src":"2647:15:90","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":59910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2647:39:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2620:66:90"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59912,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59902,"src":"2704:16:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":59913,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59898,"src":"2723:17:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2704:36:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59922,"nodeType":"IfStatement","src":"2700:160:90","trueBody":{"id":59921,"nodeType":"Block","src":"2742:118:90","statements":[{"errorCall":{"arguments":[{"id":59916,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59896,"src":"2800:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59917,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59902,"src":"2809:16:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":59918,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59898,"src":"2827:17:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59915,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59808,"src":"2767:32:90","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":59919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2767:78:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":59920,"nodeType":"RevertStatement","src":"2760:85:90"}]}},{"expression":{"arguments":[{"id":59924,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59894,"src":"2886:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"id":59925,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59896,"src":"2893:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59926,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59902,"src":"2902:16:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":59927,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59898,"src":"2921:17:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2902:36:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59923,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59980,"src":"2873:12:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":59929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2873:66:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59930,"nodeType":"ExpressionStatement","src":"2873:66:90"}]}]},"documentation":{"id":59891,"nodeType":"StructuredDocumentation","src":"2291:192:90","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."},"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2497:21:90","parameters":{"id":59899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59894,"mutability":"mutable","name":"token","nameLocation":"2526:5:90","nodeType":"VariableDeclaration","scope":59933,"src":"2519:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59893,"nodeType":"UserDefinedTypeName","pathNode":{"id":59892,"name":"IERC20","nameLocations":["2519:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"2519:6:90"},"referencedDeclaration":59710,"src":"2519:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59896,"mutability":"mutable","name":"spender","nameLocation":"2541:7:90","nodeType":"VariableDeclaration","scope":59933,"src":"2533:15:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59895,"name":"address","nodeType":"ElementaryTypeName","src":"2533:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59898,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2558:17:90","nodeType":"VariableDeclaration","scope":59933,"src":"2550:25:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59897,"name":"uint256","nodeType":"ElementaryTypeName","src":"2550:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2518:58:90"},"returnParameters":{"id":59900,"nodeType":"ParameterList","parameters":[],"src":"2586:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59980,"nodeType":"FunctionDefinition","src":"3275:380:90","nodes":[],"body":{"id":59979,"nodeType":"Block","src":"3352:303:90","nodes":[],"statements":[{"assignments":[59945],"declarations":[{"constant":false,"id":59945,"mutability":"mutable","name":"approvalCall","nameLocation":"3375:12:90","nodeType":"VariableDeclaration","scope":59979,"src":"3362:25:90","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":59944,"name":"bytes","nodeType":"ElementaryTypeName","src":"3362:5:90","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":59954,"initialValue":{"arguments":[{"expression":{"id":59948,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3405:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3411:7:90","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":59697,"src":"3405:13:90","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":59950,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59939,"src":"3421:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59951,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59941,"src":"3430:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":59952,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3420:16:90","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":59946,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3390:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":59947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3394:10:90","memberName":"encodeCall","nodeType":"MemberAccess","src":"3390:14:90","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":59953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3390:47:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3362:75:90"},{"condition":{"id":59959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3452:45:90","subExpression":{"arguments":[{"id":59956,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3477:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"id":59957,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59945,"src":"3484:12:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59955,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60071,"src":"3453:23:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":59958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3453:44:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59978,"nodeType":"IfStatement","src":"3448:201:90","trueBody":{"id":59977,"nodeType":"Block","src":"3499:150:90","statements":[{"expression":{"arguments":[{"id":59961,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3533:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":59964,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3555:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"id":59965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3561:7:90","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":59697,"src":"3555:13:90","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":59966,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59939,"src":"3571:7:90","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":59967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3580:1:90","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":59968,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3570:12:90","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":59962,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3540:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":59963,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3544:10:90","memberName":"encodeCall","nodeType":"MemberAccess","src":"3540:14:90","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":59969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3540:43:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59960,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60022,"src":"3513:19:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":59970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3513:71:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59971,"nodeType":"ExpressionStatement","src":"3513:71:90"},{"expression":{"arguments":[{"id":59973,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59937,"src":"3618:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},{"id":59974,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59945,"src":"3625:12:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59972,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60022,"src":"3598:19:90","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$59710_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":59975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3598:40:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59976,"nodeType":"ExpressionStatement","src":"3598:40:90"}]}}]},"documentation":{"id":59934,"nodeType":"StructuredDocumentation","src":"2962:308:90","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."},"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3284:12:90","parameters":{"id":59942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59937,"mutability":"mutable","name":"token","nameLocation":"3304:5:90","nodeType":"VariableDeclaration","scope":59980,"src":"3297:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59936,"nodeType":"UserDefinedTypeName","pathNode":{"id":59935,"name":"IERC20","nameLocations":["3297:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"3297:6:90"},"referencedDeclaration":59710,"src":"3297:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59939,"mutability":"mutable","name":"spender","nameLocation":"3319:7:90","nodeType":"VariableDeclaration","scope":59980,"src":"3311:15:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59938,"name":"address","nodeType":"ElementaryTypeName","src":"3311:7:90","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59941,"mutability":"mutable","name":"value","nameLocation":"3336:5:90","nodeType":"VariableDeclaration","scope":59980,"src":"3328:13:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59940,"name":"uint256","nodeType":"ElementaryTypeName","src":"3328:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3296:46:90"},"returnParameters":{"id":59943,"nodeType":"ParameterList","parameters":[],"src":"3352:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60022,"nodeType":"FunctionDefinition","src":"4038:629:90","nodes":[],"body":{"id":60021,"nodeType":"Block","src":"4108:559:90","nodes":[],"statements":[{"assignments":[59990],"declarations":[{"constant":false,"id":59990,"mutability":"mutable","name":"returndata","nameLocation":"4470:10:90","nodeType":"VariableDeclaration","scope":60021,"src":"4457:23:90","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":59989,"name":"bytes","nodeType":"ElementaryTypeName","src":"4457:5:90","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":59998,"initialValue":{"arguments":[{"id":59996,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59986,"src":"4511:4:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":59993,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59984,"src":"4491:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}],"id":59992,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4483:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59991,"name":"address","nodeType":"ElementaryTypeName","src":"4483:7:90","typeDescriptions":{}}},"id":59994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4483:14:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":59995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4498:12:90","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":59102,"src":"4483:27:90","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":59997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4483:33:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4457:59:90"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":59999,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59990,"src":"4530:10:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":60000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4541:6:90","memberName":"length","nodeType":"MemberAccess","src":"4530:17:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4551:1:90","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4530:22:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":60010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4556:31:90","subExpression":{"arguments":[{"id":60005,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59990,"src":"4568:10:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":60007,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4581:4:90","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":60006,"name":"bool","nodeType":"ElementaryTypeName","src":"4581:4:90","typeDescriptions":{}}}],"id":60008,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4580:6:90","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":60003,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4557:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":60004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4561:6:90","memberName":"decode","nodeType":"MemberAccess","src":"4557:10:90","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":60009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4557:30:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4530:57:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60020,"nodeType":"IfStatement","src":"4526:135:90","trueBody":{"id":60019,"nodeType":"Block","src":"4589:72:90","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":60015,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59984,"src":"4643:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}],"id":60014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4635:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60013,"name":"address","nodeType":"ElementaryTypeName","src":"4635:7:90","typeDescriptions":{}}},"id":60016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4635:14:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60012,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59799,"src":"4610:24:90","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":60017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4610:40:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60018,"nodeType":"RevertStatement","src":"4603:47:90"}]}}]},"documentation":{"id":59981,"nodeType":"StructuredDocumentation","src":"3661:372:90","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)."},"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4047:19:90","parameters":{"id":59987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59984,"mutability":"mutable","name":"token","nameLocation":"4074:5:90","nodeType":"VariableDeclaration","scope":60022,"src":"4067:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":59983,"nodeType":"UserDefinedTypeName","pathNode":{"id":59982,"name":"IERC20","nameLocations":["4067:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"4067:6:90"},"referencedDeclaration":59710,"src":"4067:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":59986,"mutability":"mutable","name":"data","nameLocation":"4094:4:90","nodeType":"VariableDeclaration","scope":60022,"src":"4081:17:90","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":59985,"name":"bytes","nodeType":"ElementaryTypeName","src":"4081:5:90","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4066:33:90"},"returnParameters":{"id":59988,"nodeType":"ParameterList","parameters":[],"src":"4108:0:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":60071,"nodeType":"FunctionDefinition","src":"5168:578:90","nodes":[],"body":{"id":60070,"nodeType":"Block","src":"5257:489:90","nodes":[],"statements":[{"assignments":[60034,60036],"declarations":[{"constant":false,"id":60034,"mutability":"mutable","name":"success","nameLocation":"5558:7:90","nodeType":"VariableDeclaration","scope":60070,"src":"5553:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":60033,"name":"bool","nodeType":"ElementaryTypeName","src":"5553:4:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":60036,"mutability":"mutable","name":"returndata","nameLocation":"5580:10:90","nodeType":"VariableDeclaration","scope":60070,"src":"5567:23:90","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":60035,"name":"bytes","nodeType":"ElementaryTypeName","src":"5567:5:90","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":60044,"initialValue":{"arguments":[{"id":60042,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60028,"src":"5614:4:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":60039,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60026,"src":"5602:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}],"id":60038,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5594:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60037,"name":"address","nodeType":"ElementaryTypeName","src":"5594:7:90","typeDescriptions":{}}},"id":60040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5594:14:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5609:4:90","memberName":"call","nodeType":"MemberAccess","src":"5594:19:90","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":60043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5594:25:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5552:67:90"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60045,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60034,"src":"5636:7:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":60046,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60036,"src":"5648:10:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":60047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5659:6:90","memberName":"length","nodeType":"MemberAccess","src":"5648:17:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5669:1:90","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5648:22:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":60052,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60036,"src":"5685:10:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":60054,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5698:4:90","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":60053,"name":"bool","nodeType":"ElementaryTypeName","src":"5698:4:90","typeDescriptions":{}}}],"id":60055,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5697:6:90","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":60050,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5674:3:90","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":60051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5678:6:90","memberName":"decode","nodeType":"MemberAccess","src":"5674:10:90","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":60056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5674:30:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5648:56:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":60058,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5647:58:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5636:69:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":60062,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60026,"src":"5717:5:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}],"id":60061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5709:7:90","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60060,"name":"address","nodeType":"ElementaryTypeName","src":"5709:7:90","typeDescriptions":{}}},"id":60063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5709:14:90","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5724:4:90","memberName":"code","nodeType":"MemberAccess","src":"5709:19:90","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":60065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5729:6:90","memberName":"length","nodeType":"MemberAccess","src":"5709:26:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":60066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5738:1:90","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5709:30:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5636:103:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":60032,"id":60069,"nodeType":"Return","src":"5629:110:90"}]},"documentation":{"id":60023,"nodeType":"StructuredDocumentation","src":"4673:490:90","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."},"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5177:23:90","parameters":{"id":60029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60026,"mutability":"mutable","name":"token","nameLocation":"5208:5:90","nodeType":"VariableDeclaration","scope":60071,"src":"5201:12:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"},"typeName":{"id":60025,"nodeType":"UserDefinedTypeName","pathNode":{"id":60024,"name":"IERC20","nameLocations":["5201:6:90"],"nodeType":"IdentifierPath","referencedDeclaration":59710,"src":"5201:6:90"},"referencedDeclaration":59710,"src":"5201:6:90","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$59710","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":60028,"mutability":"mutable","name":"data","nameLocation":"5228:4:90","nodeType":"VariableDeclaration","scope":60071,"src":"5215:17:90","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":60027,"name":"bytes","nodeType":"ElementaryTypeName","src":"5215:5:90","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5200:33:90"},"returnParameters":{"id":60032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60031,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60071,"src":"5251:4:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":60030,"name":"bool","nodeType":"ElementaryTypeName","src":"5251:4:90","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5250:6:90"},"scope":60072,"stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":59791,"nodeType":"StructuredDocumentation","src":"272:457:90","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,"linearizedBaseContracts":[60072],"name":"SafeERC20","nameLocation":"738:9:90","scope":60073,"usedErrors":[59799,59808],"usedEvents":[]}],"license":"MIT"},"id":90}