UNPKG

@tokamak-network/thanos-contracts

Version:
1 lines 75.6 kB
{"abi":[],"bytecode":{"object":"0x602c6032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000814000a","sourceMap":"599:8922:69:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;599:8922:69;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea164736f6c6343000814000a","sourceMap":"599:8922:69:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"LibPosition\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains helper functions for working with the `Position` type.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/dispute/lib/LibPosition.sol\":\"LibPosition\"},\"evmVersion\":\"shanghai\",\"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/dispute/lib/LibPosition.sol\":{\"keccak256\":\"0x7c5f19f8f54f06de2ce1c6cdcc5c7af65ac405130a4066cdaf146ca315818241\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://06905e5ede94784e32748ad60557cb0b0829089d65430518e7042b80d2f64e2d\",\"dweb:/ipfs/QmeGKMmnFnow2VrRvTSPavCrToqQ3qDpEaR1tVoK6Hzg8K\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.20+commit.a1b79de6"},"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":{"src/dispute/lib/LibPosition.sol":"LibPosition"},"evmVersion":"shanghai","libraries":{"src/tokamak-contracts/USDC/L2/tokamak-USDC/v2/FiatTokenV2_2.sol:SignatureChecker":"0x4200000000000000000000000000000000000776"}},"sources":{"src/dispute/lib/LibPosition.sol":{"keccak256":"0x7c5f19f8f54f06de2ce1c6cdcc5c7af65ac405130a4066cdaf146ca315818241","urls":["bzz-raw://06905e5ede94784e32748ad60557cb0b0829089d65430518e7042b80d2f64e2d","dweb:/ipfs/QmeGKMmnFnow2VrRvTSPavCrToqQ3qDpEaR1tVoK6Hzg8K"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"userdoc":{"version":1,"kind":"user","notice":"This library contains helper functions for working with the `Position` type."},"devdoc":{"version":1,"kind":"dev","title":"LibPosition"},"ast":{"absolutePath":"src/dispute/lib/LibPosition.sol","id":53558,"exportedSymbols":{"LibPosition":[53557],"Position":[53344]},"nodeType":"SourceUnit","src":"32:9490:69","nodes":[{"id":53338,"nodeType":"PragmaDirective","src":"32:24:69","nodes":[],"literals":["solidity","^","0.8",".15"]},{"id":53342,"nodeType":"UsingForDirective","src":"58:38:69","nodes":[],"global":true,"libraryName":{"id":53339,"name":"LibPosition","nameLocations":["64:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":53557,"src":"64:11:69"},"typeName":{"id":53341,"nodeType":"UserDefinedTypeName","pathNode":{"id":53340,"name":"Position","nameLocations":["80:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"80:8:69"},"referencedDeclaration":53344,"src":"80:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}},{"id":53344,"nodeType":"UserDefinedValueTypeDefinition","src":"460:25:69","nodes":[],"canonicalName":"Position","name":"Position","nameLocation":"465:8:69","underlyingType":{"id":53343,"name":"uint128","nodeType":"ElementaryTypeName","src":"477:7:69","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}},{"id":53557,"nodeType":"ContractDefinition","src":"599:8922:69","nodes":[{"id":53349,"nodeType":"VariableDeclaration","src":"811:49:69","nodes":[],"constant":true,"documentation":{"id":53346,"nodeType":"StructuredDocumentation","src":"625:181:69","text":"@notice the `MAX_POSITION_BITLEN` is the number of bits that the `Position` type, and the implementation of\n its behavior within this library, can safely support."},"mutability":"constant","name":"MAX_POSITION_BITLEN","nameLocation":"835:19:69","scope":53557,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":53347,"name":"uint8","nodeType":"ElementaryTypeName","src":"811:5:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"313236","id":53348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"857:3:69","typeDescriptions":{"typeIdentifier":"t_rational_126_by_1","typeString":"int_const 126"},"value":"126"},"visibility":"internal"},{"id":53362,"nodeType":"FunctionDefinition","src":"1116:241:69","nodes":[],"body":{"id":53361,"nodeType":"Block","src":"1210:147:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"1229:122:69","statements":[{"nodeType":"YulAssignment","src":"1294:47:69","value":{"arguments":[{"arguments":[{"name":"_depth","nodeType":"YulIdentifier","src":"1315:6:69"},{"kind":"number","nodeType":"YulLiteral","src":"1323:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1311:3:69"},"nodeType":"YulFunctionCall","src":"1311:14:69"},{"name":"_indexAtDepth","nodeType":"YulIdentifier","src":"1327:13:69"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1307:3:69"},"nodeType":"YulFunctionCall","src":"1307:34:69"},"variableNames":[{"name":"position_","nodeType":"YulIdentifier","src":"1294:9:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53352,"isOffset":false,"isSlot":false,"src":"1315:6:69","valueSize":1},{"declaration":53354,"isOffset":false,"isSlot":false,"src":"1327:13:69","valueSize":1},{"declaration":53358,"isOffset":false,"isSlot":false,"src":"1294:9:69","valueSize":1}],"id":53360,"nodeType":"InlineAssembly","src":"1220:131:69"}]},"documentation":{"id":53350,"nodeType":"StructuredDocumentation","src":"867:244:69","text":"@notice Computes a generalized index (2^{depth} + indexAtDepth).\n @param _depth The depth of the position.\n @param _indexAtDepth The index at the depth of the position.\n @return position_ The computed generalized index."},"implemented":true,"kind":"function","modifiers":[],"name":"wrap","nameLocation":"1125:4:69","parameters":{"id":53355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53352,"mutability":"mutable","name":"_depth","nameLocation":"1136:6:69","nodeType":"VariableDeclaration","scope":53362,"src":"1130:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":53351,"name":"uint8","nodeType":"ElementaryTypeName","src":"1130:5:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":53354,"mutability":"mutable","name":"_indexAtDepth","nameLocation":"1152:13:69","nodeType":"VariableDeclaration","scope":53362,"src":"1144:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53353,"name":"uint128","nodeType":"ElementaryTypeName","src":"1144:7:69","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"1129:37:69"},"returnParameters":{"id":53359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53358,"mutability":"mutable","name":"position_","nameLocation":"1199:9:69","nodeType":"VariableDeclaration","scope":53362,"src":"1190:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53357,"nodeType":"UserDefinedTypeName","pathNode":{"id":53356,"name":"Position","nameLocations":["1190:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"1190:8:69"},"referencedDeclaration":53344,"src":"1190:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"1189:20:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53373,"nodeType":"FunctionDefinition","src":"1628:1076:69","nodes":[],"body":{"id":53372,"nodeType":"Block","src":"1700:1004:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"1811:887:69","statements":[{"nodeType":"YulAssignment","src":"1825:76:69","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1838:6:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1850:1:69","type":"","value":"6"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1856:18:69","type":"","value":"0xffffffffffffffff"},{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1880:6:69"},{"name":"_position","nodeType":"YulIdentifier","src":"1888:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1876:3:69"},"nodeType":"YulFunctionCall","src":"1876:22:69"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1853:2:69"},"nodeType":"YulFunctionCall","src":"1853:46:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1846:3:69"},"nodeType":"YulFunctionCall","src":"1846:54:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1835:2:69"},"nodeType":"YulFunctionCall","src":"1835:66:69"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"1825:6:69"}]},{"nodeType":"YulAssignment","src":"1914:68:69","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1927:6:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1939:1:69","type":"","value":"5"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1945:10:69","type":"","value":"0xffffffff"},{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"1961:6:69"},{"name":"_position","nodeType":"YulIdentifier","src":"1969:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"1957:3:69"},"nodeType":"YulFunctionCall","src":"1957:22:69"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"1942:2:69"},"nodeType":"YulFunctionCall","src":"1942:38:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"1935:3:69"},"nodeType":"YulFunctionCall","src":"1935:46:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"1924:2:69"},"nodeType":"YulFunctionCall","src":"1924:58:69"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"1914:6:69"}]},{"nodeType":"YulAssignment","src":"2062:35:69","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"2079:6:69"},{"name":"_position","nodeType":"YulIdentifier","src":"2087:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2075:3:69"},"nodeType":"YulFunctionCall","src":"2075:22:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2062:9:69"}]},{"nodeType":"YulAssignment","src":"2110:45:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2126:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2141:1:69","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"2144:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2137:3:69"},"nodeType":"YulFunctionCall","src":"2137:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2123:2:69"},"nodeType":"YulFunctionCall","src":"2123:32:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2110:9:69"}]},{"nodeType":"YulAssignment","src":"2168:45:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2184:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2199:1:69","type":"","value":"2"},{"name":"_position","nodeType":"YulIdentifier","src":"2202:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2195:3:69"},"nodeType":"YulFunctionCall","src":"2195:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2181:2:69"},"nodeType":"YulFunctionCall","src":"2181:32:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2168:9:69"}]},{"nodeType":"YulAssignment","src":"2226:45:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2242:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2257:1:69","type":"","value":"4"},{"name":"_position","nodeType":"YulIdentifier","src":"2260:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2253:3:69"},"nodeType":"YulFunctionCall","src":"2253:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2239:2:69"},"nodeType":"YulFunctionCall","src":"2239:32:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2226:9:69"}]},{"nodeType":"YulAssignment","src":"2284:45:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2300:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2315:1:69","type":"","value":"8"},{"name":"_position","nodeType":"YulIdentifier","src":"2318:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2311:3:69"},"nodeType":"YulFunctionCall","src":"2311:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2297:2:69"},"nodeType":"YulFunctionCall","src":"2297:32:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2284:9:69"}]},{"nodeType":"YulAssignment","src":"2342:46:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2358:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2373:2:69","type":"","value":"16"},{"name":"_position","nodeType":"YulIdentifier","src":"2377:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2369:3:69"},"nodeType":"YulFunctionCall","src":"2369:18:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2355:2:69"},"nodeType":"YulFunctionCall","src":"2355:33:69"},"variableNames":[{"name":"_position","nodeType":"YulIdentifier","src":"2342:9:69"}]},{"nodeType":"YulAssignment","src":"2402:286:69","value":{"arguments":[{"name":"depth_","nodeType":"YulIdentifier","src":"2452:6:69"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2514:3:69","type":"","value":"251"},{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"2523:9:69"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2538:3:69","type":"","value":"224"},{"kind":"number","nodeType":"YulLiteral","src":"2543:10:69","type":"","value":"0x07c4acdd"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"2534:3:69"},"nodeType":"YulFunctionCall","src":"2534:20:69"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2519:3:69"},"nodeType":"YulFunctionCall","src":"2519:36:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"2510:3:69"},"nodeType":"YulFunctionCall","src":"2510:46:69"},{"kind":"number","nodeType":"YulLiteral","src":"2582:66:69","type":"","value":"0x0009010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"2480:4:69"},"nodeType":"YulFunctionCall","src":"2480:190:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"2428:2:69"},"nodeType":"YulFunctionCall","src":"2428:260:69"},"variableNames":[{"name":"depth_","nodeType":"YulIdentifier","src":"2402:6:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53366,"isOffset":false,"isSlot":false,"src":"1888:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"1969:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2062:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2087:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2110:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2126:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2144:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2168:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2184:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2202:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2226:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2242:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2260:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2284:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2300:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2318:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2342:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2358:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2377:9:69","valueSize":1},{"declaration":53366,"isOffset":false,"isSlot":false,"src":"2523:9:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1825:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1838:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1880:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1914:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1927:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"1961:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"2079:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"2402:6:69","valueSize":1},{"declaration":53369,"isOffset":false,"isSlot":false,"src":"2452:6:69","valueSize":1}],"id":53371,"nodeType":"InlineAssembly","src":"1802:896:69"}]},"documentation":{"id":53363,"nodeType":"StructuredDocumentation","src":"1363:260:69","text":"@notice Pulls the `depth` out of a `Position` type.\n @param _position The generalized index to get the `depth` of.\n @return depth_ The `depth` of the `position` gindex.\n @custom:attribution Solady <https://github.com/Vectorized/Solady>"},"implemented":true,"kind":"function","modifiers":[],"name":"depth","nameLocation":"1637:5:69","parameters":{"id":53367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53366,"mutability":"mutable","name":"_position","nameLocation":"1652:9:69","nodeType":"VariableDeclaration","scope":53373,"src":"1643:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53365,"nodeType":"UserDefinedTypeName","pathNode":{"id":53364,"name":"Position","nameLocations":["1643:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"1643:8:69"},"referencedDeclaration":53344,"src":"1643:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"1642:20:69"},"returnParameters":{"id":53370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53369,"mutability":"mutable","name":"depth_","nameLocation":"1692:6:69","nodeType":"VariableDeclaration","scope":53373,"src":"1686:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":53368,"name":"uint8","nodeType":"ElementaryTypeName","src":"1686:5:69","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1685:14:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53390,"nodeType":"FunctionDefinition","src":"3171:363:69","nodes":[],"body":{"id":53389,"nodeType":"Block","src":"3259:275:69","nodes":[],"statements":[{"assignments":[53383],"declarations":[{"constant":false,"id":53383,"mutability":"mutable","name":"msb","nameLocation":"3419:3:69","nodeType":"VariableDeclaration","scope":53389,"src":"3411:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53382,"name":"uint256","nodeType":"ElementaryTypeName","src":"3411:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":53387,"initialValue":{"arguments":[{"id":53385,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53377,"src":"3431:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}],"id":53384,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53373,"src":"3425:5:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":53386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3425:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"3411:30:69"},{"AST":{"nodeType":"YulBlock","src":"3460:68:69","statements":[{"nodeType":"YulAssignment","src":"3474:44:69","value":{"arguments":[{"name":"_position","nodeType":"YulIdentifier","src":"3495:9:69"},{"arguments":[{"name":"msb","nodeType":"YulIdentifier","src":"3510:3:69"},{"kind":"number","nodeType":"YulLiteral","src":"3515:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3506:3:69"},"nodeType":"YulFunctionCall","src":"3506:11:69"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3491:3:69"},"nodeType":"YulFunctionCall","src":"3491:27:69"},"variableNames":[{"name":"indexAtDepth_","nodeType":"YulIdentifier","src":"3474:13:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53377,"isOffset":false,"isSlot":false,"src":"3495:9:69","valueSize":1},{"declaration":53380,"isOffset":false,"isSlot":false,"src":"3474:13:69","valueSize":1},{"declaration":53383,"isOffset":false,"isSlot":false,"src":"3510:3:69","valueSize":1}],"id":53388,"nodeType":"InlineAssembly","src":"3451:77:69"}]},"documentation":{"id":53374,"nodeType":"StructuredDocumentation","src":"2710:456:69","text":"@notice Pulls the `indexAtDepth` out of a `Position` type.\n The `indexAtDepth` is the left/right index of a position at a specific depth within\n the binary tree, starting from index 0. For example, at gindex 2, the `depth` = 1\n and the `indexAtDepth` = 0.\n @param _position The generalized index to get the `indexAtDepth` of.\n @return indexAtDepth_ The `indexAtDepth` of the `position` gindex."},"implemented":true,"kind":"function","modifiers":[],"name":"indexAtDepth","nameLocation":"3180:12:69","parameters":{"id":53378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53377,"mutability":"mutable","name":"_position","nameLocation":"3202:9:69","nodeType":"VariableDeclaration","scope":53390,"src":"3193:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53376,"nodeType":"UserDefinedTypeName","pathNode":{"id":53375,"name":"Position","nameLocations":["3193:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"3193:8:69"},"referencedDeclaration":53344,"src":"3193:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"3192:20:69"},"returnParameters":{"id":53381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53380,"mutability":"mutable","name":"indexAtDepth_","nameLocation":"3244:13:69","nodeType":"VariableDeclaration","scope":53390,"src":"3236:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":53379,"name":"uint128","nodeType":"ElementaryTypeName","src":"3236:7:69","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"3235:23:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53402,"nodeType":"FunctionDefinition","src":"3720:148:69","nodes":[],"body":{"id":53401,"nodeType":"Block","src":"3793:75:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"3812:50:69","statements":[{"nodeType":"YulAssignment","src":"3826:26:69","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3839:1:69","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"3842:9:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3835:3:69"},"nodeType":"YulFunctionCall","src":"3835:17:69"},"variableNames":[{"name":"left_","nodeType":"YulIdentifier","src":"3826:5:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53394,"isOffset":false,"isSlot":false,"src":"3842:9:69","valueSize":1},{"declaration":53398,"isOffset":false,"isSlot":false,"src":"3826:5:69","valueSize":1}],"id":53400,"nodeType":"InlineAssembly","src":"3803:59:69"}]},"documentation":{"id":53391,"nodeType":"StructuredDocumentation","src":"3540:175:69","text":"@notice Get the left child of `_position`.\n @param _position The position to get the left position of.\n @return left_ The position to the left of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"left","nameLocation":"3729:4:69","parameters":{"id":53395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53394,"mutability":"mutable","name":"_position","nameLocation":"3743:9:69","nodeType":"VariableDeclaration","scope":53402,"src":"3734:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53393,"nodeType":"UserDefinedTypeName","pathNode":{"id":53392,"name":"Position","nameLocations":["3734:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"3734:8:69"},"referencedDeclaration":53344,"src":"3734:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"3733:20:69"},"returnParameters":{"id":53399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53398,"mutability":"mutable","name":"left_","nameLocation":"3786:5:69","nodeType":"VariableDeclaration","scope":53402,"src":"3777:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53397,"nodeType":"UserDefinedTypeName","pathNode":{"id":53396,"name":"Position","nameLocations":["3777:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"3777:8:69"},"referencedDeclaration":53344,"src":"3777:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"3776:16:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53414,"nodeType":"FunctionDefinition","src":"4057:158:69","nodes":[],"body":{"id":53413,"nodeType":"Block","src":"4132:83:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"4151:58:69","statements":[{"nodeType":"YulAssignment","src":"4165:34:69","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4178:1:69","type":"","value":"1"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4185:1:69","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"4188:9:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"4181:3:69"},"nodeType":"YulFunctionCall","src":"4181:17:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"4175:2:69"},"nodeType":"YulFunctionCall","src":"4175:24:69"},"variableNames":[{"name":"right_","nodeType":"YulIdentifier","src":"4165:6:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53406,"isOffset":false,"isSlot":false,"src":"4188:9:69","valueSize":1},{"declaration":53410,"isOffset":false,"isSlot":false,"src":"4165:6:69","valueSize":1}],"id":53412,"nodeType":"InlineAssembly","src":"4142:67:69"}]},"documentation":{"id":53403,"nodeType":"StructuredDocumentation","src":"3874:178:69","text":"@notice Get the right child of `_position`\n @param _position The position to get the right position of.\n @return right_ The position to the right of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"right","nameLocation":"4066:5:69","parameters":{"id":53407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53406,"mutability":"mutable","name":"_position","nameLocation":"4081:9:69","nodeType":"VariableDeclaration","scope":53414,"src":"4072:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53405,"nodeType":"UserDefinedTypeName","pathNode":{"id":53404,"name":"Position","nameLocations":["4072:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"4072:8:69"},"referencedDeclaration":53344,"src":"4072:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"4071:20:69"},"returnParameters":{"id":53411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53410,"mutability":"mutable","name":"right_","nameLocation":"4124:6:69","nodeType":"VariableDeclaration","scope":53414,"src":"4115:15:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53409,"nodeType":"UserDefinedTypeName","pathNode":{"id":53408,"name":"Position","nameLocations":["4115:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"4115:8:69"},"referencedDeclaration":53344,"src":"4115:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"4114:17:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53426,"nodeType":"FunctionDefinition","src":"4405:154:69","nodes":[],"body":{"id":53425,"nodeType":"Block","src":"4482:77:69","nodes":[],"statements":[{"AST":{"nodeType":"YulBlock","src":"4501:52:69","statements":[{"nodeType":"YulAssignment","src":"4515:28:69","value":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4530:1:69","type":"","value":"1"},{"name":"_position","nodeType":"YulIdentifier","src":"4533:9:69"}],"functionName":{"name":"shr","nodeType":"YulIdentifier","src":"4526:3:69"},"nodeType":"YulFunctionCall","src":"4526:17:69"},"variableNames":[{"name":"parent_","nodeType":"YulIdentifier","src":"4515:7:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53418,"isOffset":false,"isSlot":false,"src":"4533:9:69","valueSize":1},{"declaration":53422,"isOffset":false,"isSlot":false,"src":"4515:7:69","valueSize":1}],"id":53424,"nodeType":"InlineAssembly","src":"4492:61:69"}]},"documentation":{"id":53415,"nodeType":"StructuredDocumentation","src":"4221:179:69","text":"@notice Get the parent position of `_position`.\n @param _position The position to get the parent position of.\n @return parent_ The parent position of `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"parent","nameLocation":"4414:6:69","parameters":{"id":53419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53418,"mutability":"mutable","name":"_position","nameLocation":"4430:9:69","nodeType":"VariableDeclaration","scope":53426,"src":"4421:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53417,"nodeType":"UserDefinedTypeName","pathNode":{"id":53416,"name":"Position","nameLocations":["4421:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"4421:8:69"},"referencedDeclaration":53344,"src":"4421:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"4420:20:69"},"returnParameters":{"id":53423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53422,"mutability":"mutable","name":"parent_","nameLocation":"4473:7:69","nodeType":"VariableDeclaration","scope":53426,"src":"4464:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53421,"nodeType":"UserDefinedTypeName","pathNode":{"id":53420,"name":"Position","nameLocations":["4464:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"4464:8:69"},"referencedDeclaration":53344,"src":"4464:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"4463:18:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53446,"nodeType":"FunctionDefinition","src":"4980:313:69","nodes":[],"body":{"id":53445,"nodeType":"Block","src":"5084:209:69","nodes":[],"statements":[{"assignments":[53439],"declarations":[{"constant":false,"id":53439,"mutability":"mutable","name":"msb","nameLocation":"5102:3:69","nodeType":"VariableDeclaration","scope":53445,"src":"5094:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53438,"name":"uint256","nodeType":"ElementaryTypeName","src":"5094:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":53443,"initialValue":{"arguments":[{"id":53441,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53430,"src":"5114:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}],"id":53440,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53373,"src":"5108:5:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":53442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5108:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5094:30:69"},{"AST":{"nodeType":"YulBlock","src":"5143:144:69","statements":[{"nodeType":"YulVariableDeclaration","src":"5157:36:69","value":{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"5178:9:69"},{"name":"msb","nodeType":"YulIdentifier","src":"5189:3:69"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5174:3:69"},"nodeType":"YulFunctionCall","src":"5174:19:69"},"variables":[{"name":"remaining","nodeType":"YulTypedName","src":"5161:9:69","type":""}]},{"nodeType":"YulAssignment","src":"5206:71:69","value":{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5228:9:69"},{"name":"_position","nodeType":"YulIdentifier","src":"5239:9:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5224:3:69"},"nodeType":"YulFunctionCall","src":"5224:25:69"},{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5259:9:69"},{"kind":"number","nodeType":"YulLiteral","src":"5270:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5255:3:69"},"nodeType":"YulFunctionCall","src":"5255:17:69"},{"kind":"number","nodeType":"YulLiteral","src":"5274:1:69","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5251:3:69"},"nodeType":"YulFunctionCall","src":"5251:25:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5221:2:69"},"nodeType":"YulFunctionCall","src":"5221:56:69"},"variableNames":[{"name":"rightIndex_","nodeType":"YulIdentifier","src":"5206:11:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53432,"isOffset":false,"isSlot":false,"src":"5178:9:69","valueSize":1},{"declaration":53430,"isOffset":false,"isSlot":false,"src":"5239:9:69","valueSize":1},{"declaration":53439,"isOffset":false,"isSlot":false,"src":"5189:3:69","valueSize":1},{"declaration":53436,"isOffset":false,"isSlot":false,"src":"5206:11:69","valueSize":1}],"id":53444,"nodeType":"InlineAssembly","src":"5134:153:69"}]},"documentation":{"id":53427,"nodeType":"StructuredDocumentation","src":"4565:410:69","text":"@notice Get the deepest, right most gindex relative to the `position`. This is equivalent to\n calling `right` on a position until the maximum depth is reached.\n @param _position The position to get the relative deepest, right most gindex of.\n @param _maxDepth The maximum depth of the game.\n @return rightIndex_ The deepest, right most gindex relative to the `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"rightIndex","nameLocation":"4989:10:69","parameters":{"id":53433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53430,"mutability":"mutable","name":"_position","nameLocation":"5009:9:69","nodeType":"VariableDeclaration","scope":53446,"src":"5000:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53429,"nodeType":"UserDefinedTypeName","pathNode":{"id":53428,"name":"Position","nameLocations":["5000:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"5000:8:69"},"referencedDeclaration":53344,"src":"5000:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":53432,"mutability":"mutable","name":"_maxDepth","nameLocation":"5028:9:69","nodeType":"VariableDeclaration","scope":53446,"src":"5020:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53431,"name":"uint256","nodeType":"ElementaryTypeName","src":"5020:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4999:39:69"},"returnParameters":{"id":53437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53436,"mutability":"mutable","name":"rightIndex_","nameLocation":"5071:11:69","nodeType":"VariableDeclaration","scope":53446,"src":"5062:20:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53435,"nodeType":"UserDefinedTypeName","pathNode":{"id":53434,"name":"Position","nameLocations":["5062:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"5062:8:69"},"referencedDeclaration":53344,"src":"5062:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"}],"src":"5061:22:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53465,"nodeType":"FunctionDefinition","src":"5741:336:69","nodes":[],"body":{"id":53464,"nodeType":"Block","src":"5844:233:69","nodes":[],"statements":[{"assignments":[53458],"declarations":[{"constant":false,"id":53458,"mutability":"mutable","name":"msb","nameLocation":"5862:3:69","nodeType":"VariableDeclaration","scope":53464,"src":"5854:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53457,"name":"uint256","nodeType":"ElementaryTypeName","src":"5854:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":53462,"initialValue":{"arguments":[{"id":53460,"name":"_position","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53450,"src":"5874:9:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}],"id":53459,"name":"depth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":53373,"src":"5868:5:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_Position_$53344_$returns$_t_uint8_$","typeString":"function (Position) pure returns (uint8)"}},"id":53461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5868:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"5854:30:69"},{"AST":{"nodeType":"YulBlock","src":"5903:168:69","statements":[{"nodeType":"YulVariableDeclaration","src":"5917:36:69","value":{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"5938:9:69"},{"name":"msb","nodeType":"YulIdentifier","src":"5949:3:69"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5934:3:69"},"nodeType":"YulFunctionCall","src":"5934:19:69"},"variables":[{"name":"remaining","nodeType":"YulTypedName","src":"5921:9:69","type":""}]},{"nodeType":"YulAssignment","src":"5966:95:69","value":{"arguments":[{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"5992:9:69"},{"name":"_position","nodeType":"YulIdentifier","src":"6003:9:69"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"5988:3:69"},"nodeType":"YulFunctionCall","src":"5988:25:69"},{"arguments":[{"arguments":[{"name":"remaining","nodeType":"YulIdentifier","src":"6023:9:69"},{"kind":"number","nodeType":"YulLiteral","src":"6034:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6019:3:69"},"nodeType":"YulFunctionCall","src":"6019:17:69"},{"kind":"number","nodeType":"YulLiteral","src":"6038:1:69","type":"","value":"1"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"6015:3:69"},"nodeType":"YulFunctionCall","src":"6015:25:69"}],"functionName":{"name":"or","nodeType":"YulIdentifier","src":"5985:2:69"},"nodeType":"YulFunctionCall","src":"5985:56:69"},{"arguments":[{"name":"_maxDepth","nodeType":"YulIdentifier","src":"6047:9:69"},{"kind":"number","nodeType":"YulLiteral","src":"6058:1:69","type":"","value":"1"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"6043:3:69"},"nodeType":"YulFunctionCall","src":"6043:17:69"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"5981:3:69"},"nodeType":"YulFunctionCall","src":"5981:80:69"},"variableNames":[{"name":"traceIndex_","nodeType":"YulIdentifier","src":"5966:11:69"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":53452,"isOffset":false,"isSlot":false,"src":"5938:9:69","valueSize":1},{"declaration":53452,"isOffset":false,"isSlot":false,"src":"6047:9:69","valueSize":1},{"declaration":53450,"isOffset":false,"isSlot":false,"src":"6003:9:69","valueSize":1},{"declaration":53458,"isOffset":false,"isSlot":false,"src":"5949:3:69","valueSize":1},{"declaration":53455,"isOffset":false,"isSlot":false,"src":"5966:11:69","valueSize":1}],"id":53463,"nodeType":"InlineAssembly","src":"5894:177:69"}]},"documentation":{"id":53447,"nodeType":"StructuredDocumentation","src":"5299:437:69","text":"@notice Get the deepest, right most trace index relative to the `position`. This is\n equivalent to calling `right` on a position until the maximum depth is reached and\n then finding its index at depth.\n @param _position The position to get the relative trace index of.\n @param _maxDepth The maximum depth of the game.\n @return traceIndex_ The trace index relative to the `position`."},"implemented":true,"kind":"function","modifiers":[],"name":"traceIndex","nameLocation":"5750:10:69","parameters":{"id":53453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53450,"mutability":"mutable","name":"_position","nameLocation":"5770:9:69","nodeType":"VariableDeclaration","scope":53465,"src":"5761:18:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"},"typeName":{"id":53449,"nodeType":"UserDefinedTypeName","pathNode":{"id":53448,"name":"Position","nameLocations":["5761:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":53344,"src":"5761:8:69"},"referencedDeclaration":53344,"src":"5761:8:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Position_$53344","typeString":"Position"}},"visibility":"internal"},{"constant":false,"id":53452,"mutability":"mutable","name":"_maxDepth","nameLocation":"5789:9:69","nodeType":"VariableDeclaration","scope":53465,"src":"5781:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53451,"name":"uint256","nodeType":"ElementaryTypeName","src":"5781:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5760:39:69"},"returnParameters":{"id":53456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":53455,"mutability":"mutable","name":"traceIndex_","nameLocation":"5831:11:69","nodeType":"VariableDeclaration","scope":53465,"src":"5823:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53454,"name":"uint256","nodeType":"ElementaryTypeName","src":"5823:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5822:21:69"},"scope":53557,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":53488,"nodeType":"FunctionDefinition","src":"6379:710:69","nodes":[],"body":{"id":53487,"nodeType":"Block","src":"6465: