{
  "abi": [],
  "bytecode": {
    "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122061e5625dde6275648ca66c4a676359480213dc202ebd2f425901d57b3f42e2b464736f6c63430008160033",
    "sourceMap": "355:4893:37:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;355:4893:37;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122061e5625dde6275648ca66c4a676359480213dc202ebd2f425901d57b3f42e2b464736f6c63430008160033",
    "sourceMap": "355:4893:37:-:0;;;;;;;;",
    "linkReferences": {}
  },
  "methodIdentifiers": {},
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Handles \\\"phantom overflow\\\" i.e., allows multiplication and division where an intermediate value overflows 256 bits\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Contains 512-bit math functions\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib_uniswap/v3-core/contracts/libraries/FullMath.sol\":\"FullMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu\",\"stackAllocation\":true}},\"runs\":999999999},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib_uniswap/v3-core/\",\":@uniswap/v3-periphery/=lib_uniswap/v3-periphery/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":v3-core/=lib_uniswap/v3-core/\",\":v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/\"]},\"sources\":{\"lib_uniswap/v3-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x77608bce1ddeb28ed9963b554b55e8a083277eda7be31e2c7255ef532cc408be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8fcb307cf783b612ab9abd339296391d202974e7aa158deff23d9fb3aaac832d\",\"dweb:/ipfs/QmXhcwQajcGZADQtVoQpSWYNY4tB3Y42GPPyiaW62M5JH2\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.22+commit.4fc1097e"
    },
    "language": "Solidity",
    "output": {
      "abi": [],
      "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        "@uniswap/v3-core/=lib_uniswap/v3-core/",
        "@uniswap/v3-periphery/=lib_uniswap/v3-periphery/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/",
        "v3-core/=lib_uniswap/v3-core/",
        "v3-periphery/libraries/=lib_uniswap/v3-periphery/contracts/libraries/"
      ],
      "optimizer": {
        "runs": 999999999,
        "details": {
          "peephole": true,
          "inliner": true,
          "jumpdestRemover": true,
          "orderLiterals": true,
          "deduplicate": true,
          "cse": true,
          "constantOptimizer": true,
          "yul": true,
          "yulDetails": {
            "stackAllocation": true,
            "optimizerSteps": "dhfoD[xarrscLMcCTU]uljmul:fDnTOcmu"
          }
        }
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "lib_uniswap/v3-core/contracts/libraries/FullMath.sol": "FullMath"
      },
      "libraries": {}
    },
    "sources": {
      "lib_uniswap/v3-core/contracts/libraries/FullMath.sol": {
        "keccak256": "0x77608bce1ddeb28ed9963b554b55e8a083277eda7be31e2c7255ef532cc408be",
        "urls": [
          "bzz-raw://8fcb307cf783b612ab9abd339296391d202974e7aa158deff23d9fb3aaac832d",
          "dweb:/ipfs/QmXhcwQajcGZADQtVoQpSWYNY4tB3Y42GPPyiaW62M5JH2"
        ],
        "license": "MIT"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "lib_uniswap/v3-core/contracts/libraries/FullMath.sol",
    "id": 44520,
    "exportedSymbols": {
      "FullMath": [
        44519
      ]
    },
    "nodeType": "SourceUnit",
    "src": "32:5217:37",
    "nodes": [
      {
        "id": 44340,
        "nodeType": "PragmaDirective",
        "src": "32:24:37",
        "nodes": [],
        "literals": [
          "solidity",
          ">=",
          "0.4",
          ".0"
        ]
      },
      {
        "id": 44519,
        "nodeType": "ContractDefinition",
        "src": "355:4893:37",
        "nodes": [
          {
            "id": 44474,
            "nodeType": "FunctionDefinition",
            "src": "834:3804:37",
            "nodes": [],
            "body": {
              "id": 44473,
              "nodeType": "Block",
              "src": "962:3676:37",
              "nodes": [],
              "statements": [
                {
                  "id": 44472,
                  "nodeType": "UncheckedBlock",
                  "src": "963:3674:37",
                  "statements": [
                    {
                      "assignments": [
                        44354
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 44354,
                          "mutability": "mutable",
                          "name": "prod0",
                          "nameLocation": "1293:5:37",
                          "nodeType": "VariableDeclaration",
                          "scope": 44472,
                          "src": "1285:13:37",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 44353,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1285:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 44355,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1285:13:37"
                    },
                    {
                      "assignments": [
                        44357
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 44357,
                          "mutability": "mutable",
                          "name": "prod1",
                          "nameLocation": "1361:5:37",
                          "nodeType": "VariableDeclaration",
                          "scope": 44472,
                          "src": "1353:13:37",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 44356,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1353:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 44358,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "1353:13:37"
                    },
                    {
                      "AST": {
                        "nativeSrc": "1429:141:37",
                        "nodeType": "YulBlock",
                        "src": "1429:141:37",
                        "statements": [
                          {
                            "nativeSrc": "1443:30:37",
                            "nodeType": "YulVariableDeclaration",
                            "src": "1443:30:37",
                            "value": {
                              "arguments": [
                                {
                                  "name": "a",
                                  "nativeSrc": "1460:1:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "1460:1:37"
                                },
                                {
                                  "name": "b",
                                  "nativeSrc": "1463:1:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "1463:1:37"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nativeSrc": "1470:1:37",
                                      "nodeType": "YulLiteral",
                                      "src": "1470:1:37",
                                      "type": "",
                                      "value": "0"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nativeSrc": "1466:3:37",
                                    "nodeType": "YulIdentifier",
                                    "src": "1466:3:37"
                                  },
                                  "nativeSrc": "1466:6:37",
                                  "nodeType": "YulFunctionCall",
                                  "src": "1466:6:37"
                                }
                              ],
                              "functionName": {
                                "name": "mulmod",
                                "nativeSrc": "1453:6:37",
                                "nodeType": "YulIdentifier",
                                "src": "1453:6:37"
                              },
                              "nativeSrc": "1453:20:37",
                              "nodeType": "YulFunctionCall",
                              "src": "1453:20:37"
                            },
                            "variables": [
                              {
                                "name": "mm",
                                "nativeSrc": "1447:2:37",
                                "nodeType": "YulTypedName",
                                "src": "1447:2:37",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nativeSrc": "1486:18:37",
                            "nodeType": "YulAssignment",
                            "src": "1486:18:37",
                            "value": {
                              "arguments": [
                                {
                                  "name": "a",
                                  "nativeSrc": "1499:1:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "1499:1:37"
                                },
                                {
                                  "name": "b",
                                  "nativeSrc": "1502:1:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "1502:1:37"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nativeSrc": "1495:3:37",
                                "nodeType": "YulIdentifier",
                                "src": "1495:3:37"
                              },
                              "nativeSrc": "1495:9:37",
                              "nodeType": "YulFunctionCall",
                              "src": "1495:9:37"
                            },
                            "variableNames": [
                              {
                                "name": "prod0",
                                "nativeSrc": "1486:5:37",
                                "nodeType": "YulIdentifier",
                                "src": "1486:5:37"
                              }
                            ]
                          },
                          {
                            "nativeSrc": "1517:43:37",
                            "nodeType": "YulAssignment",
                            "src": "1517:43:37",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "mm",
                                      "nativeSrc": "1534:2:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "1534:2:37"
                                    },
                                    {
                                      "name": "prod0",
                                      "nativeSrc": "1538:5:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "1538:5:37"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nativeSrc": "1530:3:37",
                                    "nodeType": "YulIdentifier",
                                    "src": "1530:3:37"
                                  },
                                  "nativeSrc": "1530:14:37",
                                  "nodeType": "YulFunctionCall",
                                  "src": "1530:14:37"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "mm",
                                      "nativeSrc": "1549:2:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "1549:2:37"
                                    },
                                    {
                                      "name": "prod0",
                                      "nativeSrc": "1553:5:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "1553:5:37"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "lt",
                                    "nativeSrc": "1546:2:37",
                                    "nodeType": "YulIdentifier",
                                    "src": "1546:2:37"
                                  },
                                  "nativeSrc": "1546:13:37",
                                  "nodeType": "YulFunctionCall",
                                  "src": "1546:13:37"
                                }
                              ],
                              "functionName": {
                                "name": "sub",
                                "nativeSrc": "1526:3:37",
                                "nodeType": "YulIdentifier",
                                "src": "1526:3:37"
                              },
                              "nativeSrc": "1526:34:37",
                              "nodeType": "YulFunctionCall",
                              "src": "1526:34:37"
                            },
                            "variableNames": [
                              {
                                "name": "prod1",
                                "nativeSrc": "1517:5:37",
                                "nodeType": "YulIdentifier",
                                "src": "1517:5:37"
                              }
                            ]
                          }
                        ]
                      },
                      "evmVersion": "paris",
                      "externalReferences": [
                        {
                          "declaration": 44344,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1460:1:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44344,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1499:1:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44346,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1463:1:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44346,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1502:1:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44354,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1486:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44354,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1538:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44354,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1553:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44357,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "1517:5:37",
                          "valueSize": 1
                        }
                      ],
                      "id": 44359,
                      "nodeType": "InlineAssembly",
                      "src": "1420:150:37"
                    },
                    {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 44362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 44360,
                          "name": "prod1",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44357,
                          "src": "1642:5:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 44361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1651:1:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1642:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 44373,
                      "nodeType": "IfStatement",
                      "src": "1638:179:37",
                      "trueBody": {
                        "id": 44372,
                        "nodeType": "Block",
                        "src": "1654:163:37",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 44366,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 44364,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 44348,
                                    "src": "1676:11:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 44365,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1690:1:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "1676:15:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "id": 44363,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "1668:7:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                  "typeString": "function (bool) pure"
                                }
                              },
                              "id": 44367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1668:24:37",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 44368,
                            "nodeType": "ExpressionStatement",
                            "src": "1668:24:37"
                          },
                          {
                            "AST": {
                              "nativeSrc": "1715:65:37",
                              "nodeType": "YulBlock",
                              "src": "1715:65:37",
                              "statements": [
                                {
                                  "nativeSrc": "1733:33:37",
                                  "nodeType": "YulAssignment",
                                  "src": "1733:33:37",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "prod0",
                                        "nativeSrc": "1747:5:37",
                                        "nodeType": "YulIdentifier",
                                        "src": "1747:5:37"
                                      },
                                      {
                                        "name": "denominator",
                                        "nativeSrc": "1754:11:37",
                                        "nodeType": "YulIdentifier",
                                        "src": "1754:11:37"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nativeSrc": "1743:3:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "1743:3:37"
                                    },
                                    "nativeSrc": "1743:23:37",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1743:23:37"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "result",
                                      "nativeSrc": "1733:6:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "1733:6:37"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 44348,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1754:11:37",
                                "valueSize": 1
                              },
                              {
                                "declaration": 44354,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1747:5:37",
                                "valueSize": 1
                              },
                              {
                                "declaration": 44351,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1733:6:37",
                                "valueSize": 1
                              }
                            ],
                            "id": 44369,
                            "nodeType": "InlineAssembly",
                            "src": "1706:74:37"
                          },
                          {
                            "expression": {
                              "id": 44370,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44351,
                              "src": "1800:6:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 44352,
                            "id": 44371,
                            "nodeType": "Return",
                            "src": "1793:13:37"
                          }
                        ]
                      }
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 44377,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 44375,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44348,
                              "src": "1930:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 44376,
                              "name": "prod1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44357,
                              "src": "1944:5:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "1930:19:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "id": 44374,
                          "name": "require",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            -18,
                            -18
                          ],
                          "referencedDeclaration": -18,
                          "src": "1922:7:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                            "typeString": "function (bool) pure"
                          }
                        },
                        "id": 44378,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1922:28:37",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 44379,
                      "nodeType": "ExpressionStatement",
                      "src": "1922:28:37"
                    },
                    {
                      "assignments": [
                        44381
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 44381,
                          "mutability": "mutable",
                          "name": "remainder",
                          "nameLocation": "2235:9:37",
                          "nodeType": "VariableDeclaration",
                          "scope": 44472,
                          "src": "2227:17:37",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 44380,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2227:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 44382,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2227:17:37"
                    },
                    {
                      "AST": {
                        "nativeSrc": "2263:62:37",
                        "nodeType": "YulBlock",
                        "src": "2263:62:37",
                        "statements": [
                          {
                            "nativeSrc": "2277:38:37",
                            "nodeType": "YulAssignment",
                            "src": "2277:38:37",
                            "value": {
                              "arguments": [
                                {
                                  "name": "a",
                                  "nativeSrc": "2297:1:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2297:1:37"
                                },
                                {
                                  "name": "b",
                                  "nativeSrc": "2300:1:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2300:1:37"
                                },
                                {
                                  "name": "denominator",
                                  "nativeSrc": "2303:11:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2303:11:37"
                                }
                              ],
                              "functionName": {
                                "name": "mulmod",
                                "nativeSrc": "2290:6:37",
                                "nodeType": "YulIdentifier",
                                "src": "2290:6:37"
                              },
                              "nativeSrc": "2290:25:37",
                              "nodeType": "YulFunctionCall",
                              "src": "2290:25:37"
                            },
                            "variableNames": [
                              {
                                "name": "remainder",
                                "nativeSrc": "2277:9:37",
                                "nodeType": "YulIdentifier",
                                "src": "2277:9:37"
                              }
                            ]
                          }
                        ]
                      },
                      "evmVersion": "paris",
                      "externalReferences": [
                        {
                          "declaration": 44344,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2297:1:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44346,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2300:1:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44348,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2303:11:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44381,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2277:9:37",
                          "valueSize": 1
                        }
                      ],
                      "id": 44383,
                      "nodeType": "InlineAssembly",
                      "src": "2254:71:37"
                    },
                    {
                      "AST": {
                        "nativeSrc": "2398:108:37",
                        "nodeType": "YulBlock",
                        "src": "2398:108:37",
                        "statements": [
                          {
                            "nativeSrc": "2412:41:37",
                            "nodeType": "YulAssignment",
                            "src": "2412:41:37",
                            "value": {
                              "arguments": [
                                {
                                  "name": "prod1",
                                  "nativeSrc": "2425:5:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2425:5:37"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "remainder",
                                      "nativeSrc": "2435:9:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "2435:9:37"
                                    },
                                    {
                                      "name": "prod0",
                                      "nativeSrc": "2446:5:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "2446:5:37"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "gt",
                                    "nativeSrc": "2432:2:37",
                                    "nodeType": "YulIdentifier",
                                    "src": "2432:2:37"
                                  },
                                  "nativeSrc": "2432:20:37",
                                  "nodeType": "YulFunctionCall",
                                  "src": "2432:20:37"
                                }
                              ],
                              "functionName": {
                                "name": "sub",
                                "nativeSrc": "2421:3:37",
                                "nodeType": "YulIdentifier",
                                "src": "2421:3:37"
                              },
                              "nativeSrc": "2421:32:37",
                              "nodeType": "YulFunctionCall",
                              "src": "2421:32:37"
                            },
                            "variableNames": [
                              {
                                "name": "prod1",
                                "nativeSrc": "2412:5:37",
                                "nodeType": "YulIdentifier",
                                "src": "2412:5:37"
                              }
                            ]
                          },
                          {
                            "nativeSrc": "2466:30:37",
                            "nodeType": "YulAssignment",
                            "src": "2466:30:37",
                            "value": {
                              "arguments": [
                                {
                                  "name": "prod0",
                                  "nativeSrc": "2479:5:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2479:5:37"
                                },
                                {
                                  "name": "remainder",
                                  "nativeSrc": "2486:9:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2486:9:37"
                                }
                              ],
                              "functionName": {
                                "name": "sub",
                                "nativeSrc": "2475:3:37",
                                "nodeType": "YulIdentifier",
                                "src": "2475:3:37"
                              },
                              "nativeSrc": "2475:21:37",
                              "nodeType": "YulFunctionCall",
                              "src": "2475:21:37"
                            },
                            "variableNames": [
                              {
                                "name": "prod0",
                                "nativeSrc": "2466:5:37",
                                "nodeType": "YulIdentifier",
                                "src": "2466:5:37"
                              }
                            ]
                          }
                        ]
                      },
                      "evmVersion": "paris",
                      "externalReferences": [
                        {
                          "declaration": 44354,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2446:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44354,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2466:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44354,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2479:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44357,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2412:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44357,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2425:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44381,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2435:9:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44381,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2486:9:37",
                          "valueSize": 1
                        }
                      ],
                      "id": 44384,
                      "nodeType": "InlineAssembly",
                      "src": "2389:117:37"
                    },
                    {
                      "assignments": [
                        44386
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 44386,
                          "mutability": "mutable",
                          "name": "twos",
                          "nameLocation": "2663:4:37",
                          "nodeType": "VariableDeclaration",
                          "scope": 44472,
                          "src": "2655:12:37",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 44385,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2655:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 44397,
                      "initialValue": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 44396,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 44393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "2678:20:37",
                              "subExpression": {
                                "arguments": [
                                  {
                                    "id": 44391,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 44348,
                                    "src": "2686:11:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 44390,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2679:6:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_int256_$",
                                    "typeString": "type(int256)"
                                  },
                                  "typeName": {
                                    "id": 44389,
                                    "name": "int256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2679:6:37",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 44392,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2679:19:37",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 44388,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2670:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 44387,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2670:7:37",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 44394,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2670:29:37",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&",
                        "rightExpression": {
                          "id": 44395,
                          "name": "denominator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44348,
                          "src": "2702:11:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2670:43:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "2655:58:37"
                    },
                    {
                      "AST": {
                        "nativeSrc": "2778:61:37",
                        "nodeType": "YulBlock",
                        "src": "2778:61:37",
                        "statements": [
                          {
                            "nativeSrc": "2792:37:37",
                            "nodeType": "YulAssignment",
                            "src": "2792:37:37",
                            "value": {
                              "arguments": [
                                {
                                  "name": "denominator",
                                  "nativeSrc": "2811:11:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2811:11:37"
                                },
                                {
                                  "name": "twos",
                                  "nativeSrc": "2824:4:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2824:4:37"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nativeSrc": "2807:3:37",
                                "nodeType": "YulIdentifier",
                                "src": "2807:3:37"
                              },
                              "nativeSrc": "2807:22:37",
                              "nodeType": "YulFunctionCall",
                              "src": "2807:22:37"
                            },
                            "variableNames": [
                              {
                                "name": "denominator",
                                "nativeSrc": "2792:11:37",
                                "nodeType": "YulIdentifier",
                                "src": "2792:11:37"
                              }
                            ]
                          }
                        ]
                      },
                      "evmVersion": "paris",
                      "externalReferences": [
                        {
                          "declaration": 44348,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2792:11:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44348,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2811:11:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44386,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2824:4:37",
                          "valueSize": 1
                        }
                      ],
                      "id": 44398,
                      "nodeType": "InlineAssembly",
                      "src": "2769:70:37"
                    },
                    {
                      "AST": {
                        "nativeSrc": "2912:49:37",
                        "nodeType": "YulBlock",
                        "src": "2912:49:37",
                        "statements": [
                          {
                            "nativeSrc": "2926:25:37",
                            "nodeType": "YulAssignment",
                            "src": "2926:25:37",
                            "value": {
                              "arguments": [
                                {
                                  "name": "prod0",
                                  "nativeSrc": "2939:5:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2939:5:37"
                                },
                                {
                                  "name": "twos",
                                  "nativeSrc": "2946:4:37",
                                  "nodeType": "YulIdentifier",
                                  "src": "2946:4:37"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nativeSrc": "2935:3:37",
                                "nodeType": "YulIdentifier",
                                "src": "2935:3:37"
                              },
                              "nativeSrc": "2935:16:37",
                              "nodeType": "YulFunctionCall",
                              "src": "2935:16:37"
                            },
                            "variableNames": [
                              {
                                "name": "prod0",
                                "nativeSrc": "2926:5:37",
                                "nodeType": "YulIdentifier",
                                "src": "2926:5:37"
                              }
                            ]
                          }
                        ]
                      },
                      "evmVersion": "paris",
                      "externalReferences": [
                        {
                          "declaration": 44354,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2926:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44354,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2939:5:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44386,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "2946:4:37",
                          "valueSize": 1
                        }
                      ],
                      "id": 44399,
                      "nodeType": "InlineAssembly",
                      "src": "2903:58:37"
                    },
                    {
                      "AST": {
                        "nativeSrc": "3149:63:37",
                        "nodeType": "YulBlock",
                        "src": "3149:63:37",
                        "statements": [
                          {
                            "nativeSrc": "3163:39:37",
                            "nodeType": "YulAssignment",
                            "src": "3163:39:37",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nativeSrc": "3183:1:37",
                                          "nodeType": "YulLiteral",
                                          "src": "3183:1:37",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "name": "twos",
                                          "nativeSrc": "3186:4:37",
                                          "nodeType": "YulIdentifier",
                                          "src": "3186:4:37"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "sub",
                                        "nativeSrc": "3179:3:37",
                                        "nodeType": "YulIdentifier",
                                        "src": "3179:3:37"
                                      },
                                      "nativeSrc": "3179:12:37",
                                      "nodeType": "YulFunctionCall",
                                      "src": "3179:12:37"
                                    },
                                    {
                                      "name": "twos",
                                      "nativeSrc": "3193:4:37",
                                      "nodeType": "YulIdentifier",
                                      "src": "3193:4:37"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "div",
                                    "nativeSrc": "3175:3:37",
                                    "nodeType": "YulIdentifier",
                                    "src": "3175:3:37"
                                  },
                                  "nativeSrc": "3175:23:37",
                                  "nodeType": "YulFunctionCall",
                                  "src": "3175:23:37"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "3200:1:37",
                                  "nodeType": "YulLiteral",
                                  "src": "3200:1:37",
                                  "type": "",
                                  "value": "1"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "3171:3:37",
                                "nodeType": "YulIdentifier",
                                "src": "3171:3:37"
                              },
                              "nativeSrc": "3171:31:37",
                              "nodeType": "YulFunctionCall",
                              "src": "3171:31:37"
                            },
                            "variableNames": [
                              {
                                "name": "twos",
                                "nativeSrc": "3163:4:37",
                                "nodeType": "YulIdentifier",
                                "src": "3163:4:37"
                              }
                            ]
                          }
                        ]
                      },
                      "evmVersion": "paris",
                      "externalReferences": [
                        {
                          "declaration": 44386,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3163:4:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44386,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3186:4:37",
                          "valueSize": 1
                        },
                        {
                          "declaration": 44386,
                          "isOffset": false,
                          "isSlot": false,
                          "src": "3193:4:37",
                          "valueSize": 1
                        }
                      ],
                      "id": 44400,
                      "nodeType": "InlineAssembly",
                      "src": "3140:72:37"
                    },
                    {
                      "expression": {
                        "id": 44405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44401,
                          "name": "prod0",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44354,
                          "src": "3221:5:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "|=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 44402,
                            "name": "prod1",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44357,
                            "src": "3230:5:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 44403,
                            "name": "twos",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44386,
                            "src": "3238:4:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3230:12:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3221:21:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44406,
                      "nodeType": "ExpressionStatement",
                      "src": "3221:21:37"
                    },
                    {
                      "assignments": [
                        44408
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 44408,
                          "mutability": "mutable",
                          "name": "inv",
                          "nameLocation": "3584:3:37",
                          "nodeType": "VariableDeclaration",
                          "scope": 44472,
                          "src": "3576:11:37",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "typeName": {
                            "id": 44407,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3576:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 44415,
                      "initialValue": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 44414,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 44411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "33",
                                "id": 44409,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3591:1:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 44410,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44348,
                                "src": "3595:11:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "3591:15:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 44412,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "3590:17:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "^",
                        "rightExpression": {
                          "hexValue": "32",
                          "id": 44413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3610:1:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "src": "3590:21:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "3576:35:37"
                    },
                    {
                      "expression": {
                        "id": 44422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44416,
                          "name": "inv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44408,
                          "src": "3826:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "*=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "32",
                            "id": 44417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3833:1:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 44420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 44418,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44348,
                              "src": "3837:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 44419,
                              "name": "inv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44408,
                              "src": "3851:3:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3837:17:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3833:21:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3826:28:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44423,
                      "nodeType": "ExpressionStatement",
                      "src": "3826:28:37"
                    },
                    {
                      "expression": {
                        "id": 44430,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44424,
                          "name": "inv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44408,
                          "src": "3884:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "*=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "32",
                            "id": 44425,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3891:1:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 44428,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 44426,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44348,
                              "src": "3895:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 44427,
                              "name": "inv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44408,
                              "src": "3909:3:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3895:17:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3891:21:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3884:28:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44431,
                      "nodeType": "ExpressionStatement",
                      "src": "3884:28:37"
                    },
                    {
                      "expression": {
                        "id": 44438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44432,
                          "name": "inv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44408,
                          "src": "3943:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "*=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44437,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "32",
                            "id": 44433,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3950:1:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 44436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 44434,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44348,
                              "src": "3954:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 44435,
                              "name": "inv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44408,
                              "src": "3968:3:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "3954:17:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3950:21:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3943:28:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44439,
                      "nodeType": "ExpressionStatement",
                      "src": "3943:28:37"
                    },
                    {
                      "expression": {
                        "id": 44446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44440,
                          "name": "inv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44408,
                          "src": "4002:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "*=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44445,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "32",
                            "id": 44441,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4009:1:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 44444,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 44442,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44348,
                              "src": "4013:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 44443,
                              "name": "inv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44408,
                              "src": "4027:3:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4013:17:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4009:21:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4002:28:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44447,
                      "nodeType": "ExpressionStatement",
                      "src": "4002:28:37"
                    },
                    {
                      "expression": {
                        "id": 44454,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44448,
                          "name": "inv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44408,
                          "src": "4061:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "*=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44453,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "32",
                            "id": 44449,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4068:1:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 44452,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 44450,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44348,
                              "src": "4072:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 44451,
                              "name": "inv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44408,
                              "src": "4086:3:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4072:17:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4068:21:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4061:28:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44455,
                      "nodeType": "ExpressionStatement",
                      "src": "4061:28:37"
                    },
                    {
                      "expression": {
                        "id": 44462,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44456,
                          "name": "inv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44408,
                          "src": "4121:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "*=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44461,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "32",
                            "id": 44457,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4128:1:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 44460,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 44458,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44348,
                              "src": "4132:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 44459,
                              "name": "inv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44408,
                              "src": "4146:3:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4132:17:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4128:21:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4121:28:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44463,
                      "nodeType": "ExpressionStatement",
                      "src": "4121:28:37"
                    },
                    {
                      "expression": {
                        "id": 44468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44464,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44351,
                          "src": "4587:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 44467,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 44465,
                            "name": "prod0",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44354,
                            "src": "4596:5:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 44466,
                            "name": "inv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44408,
                            "src": "4604:3:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4596:11:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4587:20:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44469,
                      "nodeType": "ExpressionStatement",
                      "src": "4587:20:37"
                    },
                    {
                      "expression": {
                        "id": 44470,
                        "name": "result",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44351,
                        "src": "4624:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "functionReturnParameters": 44352,
                      "id": 44471,
                      "nodeType": "Return",
                      "src": "4617:13:37"
                    }
                  ]
                }
              ]
            },
            "documentation": {
              "id": 44342,
              "nodeType": "StructuredDocumentation",
              "src": "378:359:37",
              "text": "@notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @param a The multiplicand\n @param b The multiplier\n @param denominator The divisor\n @return result The 256-bit result\n @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulDiv",
            "nameLocation": "843:6:37",
            "parameters": {
              "id": 44349,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44344,
                  "mutability": "mutable",
                  "name": "a",
                  "nameLocation": "867:1:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 44474,
                  "src": "859:9:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44343,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "859:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44346,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "886:1:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 44474,
                  "src": "878:9:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44345,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "878:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44348,
                  "mutability": "mutable",
                  "name": "denominator",
                  "nameLocation": "905:11:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 44474,
                  "src": "897:19:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44347,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "849:73:37"
            },
            "returnParameters": {
              "id": 44352,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44351,
                  "mutability": "mutable",
                  "name": "result",
                  "nameLocation": "954:6:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 44474,
                  "src": "946:14:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44350,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "946:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "945:16:37"
            },
            "scope": 44519,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 44518,
            "nodeType": "FunctionDefinition",
            "src": "4920:326:37",
            "nodes": [],
            "body": {
              "id": 44517,
              "nodeType": "Block",
              "src": "5058:188:37",
              "nodes": [],
              "statements": [
                {
                  "id": 44516,
                  "nodeType": "UncheckedBlock",
                  "src": "5059:186:37",
                  "statements": [
                    {
                      "expression": {
                        "id": 44492,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 44486,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44484,
                          "src": "5078:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "arguments": [
                            {
                              "id": 44488,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44477,
                              "src": "5094:1:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 44489,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44479,
                              "src": "5097:1:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 44490,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44481,
                              "src": "5100:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 44487,
                            "name": "mulDiv",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 44474,
                            "src": "5087:6:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 44491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5087:25:37",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5078:34:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 44493,
                      "nodeType": "ExpressionStatement",
                      "src": "5078:34:37"
                    },
                    {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 44500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 44495,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44477,
                              "src": "5133:1:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 44496,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44479,
                              "src": "5136:1:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 44497,
                              "name": "denominator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44481,
                              "src": "5139:11:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 44494,
                            "name": "mulmod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -16,
                            "src": "5126:6:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 44498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5126:25:37",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 44499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5154:1:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "5126:29:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 44515,
                      "nodeType": "IfStatement",
                      "src": "5122:117:37",
                      "trueBody": {
                        "id": 44514,
                        "nodeType": "Block",
                        "src": "5157:82:37",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 44508,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 44502,
                                    "name": "result",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 44484,
                                    "src": "5179:6:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 44505,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "5193:7:37",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": {
                                            "id": 44504,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "5193:7:37",
                                            "typeDescriptions": {}
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          }
                                        ],
                                        "id": 44503,
                                        "name": "type",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -27,
                                        "src": "5188:4:37",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 44506,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5188:13:37",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_meta_type_t_uint256",
                                        "typeString": "type(uint256)"
                                      }
                                    },
                                    "id": 44507,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "5202:3:37",
                                    "memberName": "max",
                                    "nodeType": "MemberAccess",
                                    "src": "5188:17:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5179:26:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "id": 44501,
                                "name": "require",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  -18,
                                  -18
                                ],
                                "referencedDeclaration": -18,
                                "src": "5171:7:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                  "typeString": "function (bool) pure"
                                }
                              },
                              "id": 44509,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5171:35:37",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 44510,
                            "nodeType": "ExpressionStatement",
                            "src": "5171:35:37"
                          },
                          {
                            "expression": {
                              "id": 44512,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "5220:8:37",
                              "subExpression": {
                                "id": 44511,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44484,
                                "src": "5220:6:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 44513,
                            "nodeType": "ExpressionStatement",
                            "src": "5220:8:37"
                          }
                        ]
                      }
                    }
                  ]
                }
              ]
            },
            "documentation": {
              "id": 44475,
              "nodeType": "StructuredDocumentation",
              "src": "4644:271:37",
              "text": "@notice Calculates ceil(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @param a The multiplicand\n @param b The multiplier\n @param denominator The divisor\n @return result The 256-bit result"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulDivRoundingUp",
            "nameLocation": "4929:16:37",
            "parameters": {
              "id": 44482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44477,
                  "mutability": "mutable",
                  "name": "a",
                  "nameLocation": "4963:1:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 44518,
                  "src": "4955:9:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4955:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44479,
                  "mutability": "mutable",
                  "name": "b",
                  "nameLocation": "4982:1:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 44518,
                  "src": "4974:9:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44478,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4974:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 44481,
                  "mutability": "mutable",
                  "name": "denominator",
                  "nameLocation": "5001:11:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 44518,
                  "src": "4993:19:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44480,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4993:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4945:73:37"
            },
            "returnParameters": {
              "id": 44485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44484,
                  "mutability": "mutable",
                  "name": "result",
                  "nameLocation": "5050:6:37",
                  "nodeType": "VariableDeclaration",
                  "scope": 44518,
                  "src": "5042:14:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 44483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5042:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5041:16:37"
            },
            "scope": 44519,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "FullMath",
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 44341,
          "nodeType": "StructuredDocumentation",
          "src": "58:297:37",
          "text": "@title Contains 512-bit math functions\n @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision\n @dev Handles \"phantom overflow\" i.e., allows multiplication and division where an intermediate value overflows 256 bits"
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          44519
        ],
        "name": "FullMath",
        "nameLocation": "363:8:37",
        "scope": 44520,
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "license": "MIT"
  },
  "id": 37
}