UNPKG

@tokamak-network/thanos-contracts

Version:
1 lines 51.7 kB
{"abi":[],"bytecode":{"object":"0x602d6023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c634300060c000a","sourceMap":"622:4578:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x73000000000000000000000000000000000000000030146080604052600080fdfea164736f6c634300060c000a","sourceMap":"622:4578:0:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when 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.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts_v3.1.0/contracts/math/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{\"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\":{\"lib/openzeppelin-contracts_v3.1.0/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5\",\"dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.6.12+commit.27d51765"},"language":"Solidity","output":{"abi":[],"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":{"lib/openzeppelin-contracts_v3.1.0/contracts/math/SafeMath.sol":"SafeMath"},"evmVersion":"istanbul","libraries":{"SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"lib/openzeppelin-contracts_v3.1.0/contracts/math/SafeMath.sol":{"keccak256":"0x9a9cf02622cd7a64261b10534fc3260449da25c98c9e96d1b4ae8110a20e5806","urls":["bzz-raw://2df142592d1dc267d9549049ee3317fa190d2f87eaa565f86ab05ec83f7ab8f5","dweb:/ipfs/QmSkJtcfWo7c42KnL5hho6GFxK6HRNV91XABx1P7xDtfLV"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user"},"devdoc":{"version":1,"kind":"dev","details":"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when 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."},"ast":{"absolutePath":"lib/openzeppelin-contracts_v3.1.0/contracts/math/SafeMath.sol","id":196,"exportedSymbols":{"SafeMath":[195]},"nodeType":"SourceUnit","src":"33:5168:0","nodes":[{"id":1,"nodeType":"PragmaDirective","src":"33:23:0","nodes":[],"literals":["solidity","^","0.6",".0"]},{"id":195,"nodeType":"ContractDefinition","src":"622:4578:0","nodes":[{"id":28,"nodeType":"FunctionDefinition","src":"874:176:0","nodes":[],"body":{"id":27,"nodeType":"Block","src":"941:109:0","nodes":[],"statements":[{"assignments":[13],"declarations":[{"constant":false,"id":13,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","overrides":null,"scope":27,"src":"951:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12,"name":"uint256","nodeType":"ElementaryTypeName","src":"951:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":17,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":14,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"963:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"argumentTypes":null,"id":15,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7,"src":"967:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"963:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"951:17:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":19,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"986:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"argumentTypes":null,"id":20,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5,"src":"991:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"986:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"536166654d6174683a206164646974696f6e206f766572666c6f77","id":22,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"994:29:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a","typeString":"literal_string \"SafeMath: addition overflow\""},"value":"SafeMath: addition overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_30cc447bcc13b3e22b45cef0dd9b0b514842d836dd9b6eb384e20dedfb47723a","typeString":"literal_string \"SafeMath: addition overflow\""}],"id":18,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"978:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":23,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"978:46:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24,"nodeType":"ExpressionStatement","src":"978:46:0"},{"expression":{"argumentTypes":null,"id":25,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13,"src":"1042:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11,"id":26,"nodeType":"Return","src":"1035:8:0"}]},"documentation":{"id":3,"nodeType":"StructuredDocumentation","src":"645:224:0","text":" @dev Returns the addition of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow."},"implemented":true,"kind":"function","modifiers":[],"name":"add","overrides":null,"parameters":{"id":8,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","overrides":null,"scope":28,"src":"887:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4,"name":"uint256","nodeType":"ElementaryTypeName","src":"887:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":7,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","overrides":null,"scope":28,"src":"898:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6,"name":"uint256","nodeType":"ElementaryTypeName","src":"898:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"886:22:0"},"returnParameters":{"id":11,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","overrides":null,"scope":28,"src":"932:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9,"name":"uint256","nodeType":"ElementaryTypeName","src":"932:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"931:9:0"},"scope":195,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":45,"nodeType":"FunctionDefinition","src":"1321:134:0","nodes":[],"body":{"id":44,"nodeType":"Block","src":"1388:67:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":39,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31,"src":"1409:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":40,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33,"src":"1412:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"536166654d6174683a207375627472616374696f6e206f766572666c6f77","id":41,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1415:32:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862","typeString":"literal_string \"SafeMath: subtraction overflow\""},"value":"SafeMath: subtraction overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_50b058e9b5320e58880d88223c9801cd9eecdcf90323d5c2318bc1b6b916e862","typeString":"literal_string \"SafeMath: subtraction overflow\""}],"id":38,"name":"sub","nodeType":"Identifier","overloadedDeclarations":[45,73],"referencedDeclaration":73,"src":"1405:3:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":42,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1405:43:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":37,"id":43,"nodeType":"Return","src":"1398:50:0"}]},"documentation":{"id":29,"nodeType":"StructuredDocumentation","src":"1056:260:0","text":" @dev Returns the subtraction of two unsigned integers, reverting on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."},"implemented":true,"kind":"function","modifiers":[],"name":"sub","overrides":null,"parameters":{"id":34,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","overrides":null,"scope":45,"src":"1334:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30,"name":"uint256","nodeType":"ElementaryTypeName","src":"1334:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":33,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","overrides":null,"scope":45,"src":"1345:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32,"name":"uint256","nodeType":"ElementaryTypeName","src":"1345:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1333:22:0"},"returnParameters":{"id":37,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","overrides":null,"scope":45,"src":"1379:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35,"name":"uint256","nodeType":"ElementaryTypeName","src":"1379:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1378:9:0"},"scope":195,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":73,"nodeType":"FunctionDefinition","src":"1746:187:0","nodes":[],"body":{"id":72,"nodeType":"Block","src":"1841:92:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":58,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50,"src":"1859:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"argumentTypes":null,"id":59,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"1864:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1859:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"id":61,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52,"src":"1867:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":57,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1851:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1851:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63,"nodeType":"ExpressionStatement","src":"1851:29:0"},{"assignments":[65],"declarations":[{"constant":false,"id":65,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","overrides":null,"scope":72,"src":"1890:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":64,"name":"uint256","nodeType":"ElementaryTypeName","src":"1890:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":69,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":68,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":66,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48,"src":"1902:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"argumentTypes":null,"id":67,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50,"src":"1906:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1902:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1890:17:0"},{"expression":{"argumentTypes":null,"id":70,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65,"src":"1925:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":56,"id":71,"nodeType":"Return","src":"1918:8:0"}]},"documentation":{"id":46,"nodeType":"StructuredDocumentation","src":"1461:280:0","text":" @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow."},"implemented":true,"kind":"function","modifiers":[],"name":"sub","overrides":null,"parameters":{"id":53,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","overrides":null,"scope":73,"src":"1759:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47,"name":"uint256","nodeType":"ElementaryTypeName","src":"1759:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":50,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","overrides":null,"scope":73,"src":"1770:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49,"name":"uint256","nodeType":"ElementaryTypeName","src":"1770:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":52,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","overrides":null,"scope":73,"src":"1781:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":51,"name":"string","nodeType":"ElementaryTypeName","src":"1781:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"1758:50:0"},"returnParameters":{"id":56,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","overrides":null,"scope":73,"src":"1832:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54,"name":"uint256","nodeType":"ElementaryTypeName","src":"1832:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"1831:9:0"},"scope":195,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":108,"nodeType":"FunctionDefinition","src":"2180:459:0","nodes":[],"body":{"id":107,"nodeType":"Block","src":"2247:392:0","nodes":[],"statements":[{"condition":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":85,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":83,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"2479:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"hexValue":"30","id":84,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2484:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2479:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":null,"id":89,"nodeType":"IfStatement","src":"2475:45:0","trueBody":{"id":88,"nodeType":"Block","src":"2487:33:0","statements":[{"expression":{"argumentTypes":null,"hexValue":"30","id":86,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2508:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":82,"id":87,"nodeType":"Return","src":"2501:8:0"}]}},{"assignments":[91],"declarations":[{"constant":false,"id":91,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","overrides":null,"scope":107,"src":"2530:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":90,"name":"uint256","nodeType":"ElementaryTypeName","src":"2530:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":95,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":94,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":92,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"2542:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"argumentTypes":null,"id":93,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78,"src":"2546:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2542:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2530:17:0"},{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":99,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":97,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"2565:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"argumentTypes":null,"id":98,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":76,"src":"2569:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2565:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"argumentTypes":null,"id":100,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":78,"src":"2574:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2565:10:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"hexValue":"536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77","id":102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2577:35:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3","typeString":"literal_string \"SafeMath: multiplication overflow\""},"value":"SafeMath: multiplication overflow"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9113bb53c2876a3805b2c9242029423fc540a728243ce887ab24c82cf119fba3","typeString":"literal_string \"SafeMath: multiplication overflow\""}],"id":96,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2557:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2557:56:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":104,"nodeType":"ExpressionStatement","src":"2557:56:0"},{"expression":{"argumentTypes":null,"id":105,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":91,"src":"2631:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":82,"id":106,"nodeType":"Return","src":"2624:8:0"}]},"documentation":{"id":74,"nodeType":"StructuredDocumentation","src":"1939:236:0","text":" @dev Returns the multiplication of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow."},"implemented":true,"kind":"function","modifiers":[],"name":"mul","overrides":null,"parameters":{"id":79,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","overrides":null,"scope":108,"src":"2193:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":75,"name":"uint256","nodeType":"ElementaryTypeName","src":"2193:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":78,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","overrides":null,"scope":108,"src":"2204:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":77,"name":"uint256","nodeType":"ElementaryTypeName","src":"2204:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2192:22:0"},"returnParameters":{"id":82,"nodeType":"ParameterList","parameters":[{"constant":false,"id":81,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","overrides":null,"scope":108,"src":"2238:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":80,"name":"uint256","nodeType":"ElementaryTypeName","src":"2238:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"2237:9:0"},"scope":195,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":125,"nodeType":"FunctionDefinition","src":"3101:130:0","nodes":[],"body":{"id":124,"nodeType":"Block","src":"3168:63:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":119,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":111,"src":"3189:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":120,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":113,"src":"3192:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"536166654d6174683a206469766973696f6e206279207a65726f","id":121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3195:28:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f","typeString":"literal_string \"SafeMath: division by zero\""},"value":"SafeMath: division by zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_5b7cc70dda4dc2143e5adb63bd5d1f349504f461dbdfd9bc76fac1f8ca6d019f","typeString":"literal_string \"SafeMath: division by zero\""}],"id":118,"name":"div","nodeType":"Identifier","overloadedDeclarations":[125,153],"referencedDeclaration":153,"src":"3185:3:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3185:39:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":117,"id":123,"nodeType":"Return","src":"3178:46:0"}]},"documentation":{"id":109,"nodeType":"StructuredDocumentation","src":"2645:451:0","text":" @dev Returns the integer division of two unsigned integers. Reverts on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."},"implemented":true,"kind":"function","modifiers":[],"name":"div","overrides":null,"parameters":{"id":114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":111,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","overrides":null,"scope":125,"src":"3114:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":110,"name":"uint256","nodeType":"ElementaryTypeName","src":"3114:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":113,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","overrides":null,"scope":125,"src":"3125:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":112,"name":"uint256","nodeType":"ElementaryTypeName","src":"3125:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3113:22:0"},"returnParameters":{"id":117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":116,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","overrides":null,"scope":125,"src":"3159:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":115,"name":"uint256","nodeType":"ElementaryTypeName","src":"3159:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3158:9:0"},"scope":195,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":153,"nodeType":"FunctionDefinition","src":"3713:272:0","nodes":[],"body":{"id":152,"nodeType":"Block","src":"3808:177:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":138,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":130,"src":"3826:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"argumentTypes":null,"hexValue":"30","id":139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3830:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3826:5:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"id":141,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":132,"src":"3833:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":137,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3818:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3818:28:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":143,"nodeType":"ExpressionStatement","src":"3818:28:0"},{"assignments":[145],"declarations":[{"constant":false,"id":145,"mutability":"mutable","name":"c","nodeType":"VariableDeclaration","overrides":null,"scope":152,"src":"3856:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":144,"name":"uint256","nodeType":"ElementaryTypeName","src":"3856:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"id":149,"initialValue":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":146,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":128,"src":"3868:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"argumentTypes":null,"id":147,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":130,"src":"3872:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3868:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3856:17:0"},{"expression":{"argumentTypes":null,"id":150,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":145,"src":"3977:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":136,"id":151,"nodeType":"Return","src":"3970:8:0"}]},"documentation":{"id":126,"nodeType":"StructuredDocumentation","src":"3237:471:0","text":" @dev Returns the integer division of two unsigned integers. Reverts with custom message on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."},"implemented":true,"kind":"function","modifiers":[],"name":"div","overrides":null,"parameters":{"id":133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":128,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","overrides":null,"scope":153,"src":"3726:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":127,"name":"uint256","nodeType":"ElementaryTypeName","src":"3726:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":130,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","overrides":null,"scope":153,"src":"3737:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":129,"name":"uint256","nodeType":"ElementaryTypeName","src":"3737:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":132,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","overrides":null,"scope":153,"src":"3748:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":131,"name":"string","nodeType":"ElementaryTypeName","src":"3748:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":null,"visibility":"internal"}],"src":"3725:50:0"},"returnParameters":{"id":136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":135,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","overrides":null,"scope":153,"src":"3799:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":134,"name":"uint256","nodeType":"ElementaryTypeName","src":"3799:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"3798:9:0"},"scope":195,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":170,"nodeType":"FunctionDefinition","src":"4436:128:0","nodes":[],"body":{"id":169,"nodeType":"Block","src":"4503:61:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"id":164,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":156,"src":"4524:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"id":165,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":158,"src":"4527:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"argumentTypes":null,"hexValue":"536166654d6174683a206d6f64756c6f206279207a65726f","id":166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4530:26:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832","typeString":"literal_string \"SafeMath: modulo by zero\""},"value":"SafeMath: modulo by zero"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_726e51f7b81fce0a68f5f214f445e275313b20b1633f08ce954ee39abf8d7832","typeString":"literal_string \"SafeMath: modulo by zero\""}],"id":163,"name":"mod","nodeType":"Identifier","overloadedDeclarations":[170,194],"referencedDeclaration":194,"src":"4520:3:0","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256,uint256,string memory) pure returns (uint256)"}},"id":167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4520:37:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":162,"id":168,"nodeType":"Return","src":"4513:44:0"}]},"documentation":{"id":154,"nodeType":"StructuredDocumentation","src":"3991:440:0","text":" @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n Reverts when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."},"implemented":true,"kind":"function","modifiers":[],"name":"mod","overrides":null,"parameters":{"id":159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":156,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","overrides":null,"scope":170,"src":"4449:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":155,"name":"uint256","nodeType":"ElementaryTypeName","src":"4449:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":158,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","overrides":null,"scope":170,"src":"4460:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":157,"name":"uint256","nodeType":"ElementaryTypeName","src":"4460:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4448:22:0"},"returnParameters":{"id":162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":161,"mutability":"mutable","name":"","nodeType":"VariableDeclaration","overrides":null,"scope":170,"src":"4494:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":160,"name":"uint256","nodeType":"ElementaryTypeName","src":"4494:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"}],"src":"4493:9:0"},"scope":195,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":194,"nodeType":"FunctionDefinition","src":"5035:163:0","nodes":[],"body":{"id":193,"nodeType":"Block","src":"5130:68:0","nodes":[],"statements":[{"expression":{"argumentTypes":null,"arguments":[{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":183,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":175,"src":"5148:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"argumentTypes":null,"hexValue":"30","id":184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5153:1:0","subdenomination":null,"typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5148:6:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"argumentTypes":null,"id":186,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":177,"src":"5156:12:0","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":182,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5140:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5140:29:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":188,"nodeType":"ExpressionStatement","src":"5140:29:0"},{"expression":{"argumentTypes":null,"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"argumentTypes":null,"id":189,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":173,"src":"5186:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"argumentTypes":null,"id":190,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":175,"src":"5190:1:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5186:5:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":181,"id":192,"nodeType":"Return","src":"5179:12:0"}]},"documentation":{"id":171,"nodeType":"StructuredDocumentation","src":"4570:460:0","text":" @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n Reverts with custom message when dividing by zero.\n Counterpart to Solidity's `%` operator. This function uses a `revert`\n opcode (which leaves remaining gas untouched) while Solidity uses an\n invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero."},"implemented":true,"kind":"function","modifiers":[],"name":"mod","overrides":null,"parameters":{"id":178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":173,"mutability":"mutable","name":"a","nodeType":"VariableDeclaration","overrides":null,"scope":194,"src":"5048:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":172,"name":"uint256","nodeType":"ElementaryTypeName","src":"5048:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":175,"mutability":"mutable","name":"b","nodeType":"VariableDeclaration","overrides":null,"scope":194,"src":"5059:9:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":174,"name":"uint256","nodeType":"ElementaryTypeName","src":"5059:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":null,"visibility":"internal"},{"constant":false,"id":177,"mutability":"mutable","name":"errorMessage","nodeType":"VariableDeclaration","overrides":null,"scope":194,"src":"5070:26:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":176