{
  "contractName": "PeriodUtils",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"title\":\"PeriodUtils\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Utility methods for dealing with Periods\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol\":\"PeriodUtils\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol\":{\"keccak256\":\"0x4374a4c79ef02bb008994431870badedd532d09639fef8d7378039faee88d4dd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c0d32929c237f8d04ff4117611292f874bb1dd785b8ec94c04389d608c11481c\",\"dweb:/ipfs/QmVu3awVGWDvqMCjPhmzcCQCRg4VNr5XxcDRWDECTr17TV\"]},\"@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol\":{\"keccak256\":\"0xb549e34dc631989f8aae1b8a397bf77598b8c018860645a627d2929229543a79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8a0ef5e2ad69ef87b9fc2beeed66336b3857c576efb9833b40a1be2ee35786fc\",\"dweb:/ipfs/QmT33MWqdjecGoPj8Js6a5fgESTcGW5vbQqYamKRDJZnhS\"]},\"@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x679533db9ba3257086015c0435c7d0de7a0a2f352a9de725db294e3f42c17391\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c586a5d8d9a654840c3655ccd4e47458d1e781c7542ec6fd2c29638b0dee57d\",\"dweb:/ipfs/QmeoQpnTMU4pa4iwKJcKmbNm7P54UCxux2G9rJyTCyq8GZ\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220c98ffb2a0b6ef3819ac13fd6b1528c57e909e52891209351c923256c6dd547a264736f6c634300060b0033",
  "deployedBytecode": "0x6080604052600080fdfea2646970667358221220c98ffb2a0b6ef3819ac13fd6b1528c57e909e52891209351c923256c6dd547a264736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "282:1042:83:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "282:1042:83:-:0;;;;;",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\";\n\nimport \"../ACTUSTypes.sol\";\n\n/**\n * @title PeriodUtils\n * @notice Utility methods for dealing with Periods\n */\ncontract PeriodUtils {\n\n    using BokkyPooBahsDateTimeLibrary for uint;\n\n    /**\n     * @notice Applies a period in IP notation to a given timestamp\n     */\n    function getTimestampPlusPeriod(IP memory period, uint256 timestamp)\n        internal\n        pure\n        returns (uint256)\n    {\n        uint256 newTimestamp;\n\n        if (period.p == P.D) {\n            newTimestamp = timestamp.addDays(period.i);\n        } else if (period.p == P.W) {\n            newTimestamp = timestamp.addDays(period.i * 7);\n        } else if (period.p == P.M) {\n            newTimestamp = timestamp.addMonths(period.i);\n        } else if (period.p == P.Q) {\n            newTimestamp = timestamp.addMonths(period.i * 3);\n        } else if (period.p == P.H) {\n            newTimestamp = timestamp.addMonths(period.i * 6);\n        } else if (period.p == P.Y) {\n            newTimestamp = timestamp.addYears(period.i);\n        } else {\n            revert(\"PeriodUtils.getTimestampPlusPeriod: ATTRIBUTE_NOT_FOUND\");\n        }\n\n        return newTimestamp;\n    }\n}\n",
  "sourcePath": "@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol",
  "ast": {
    "absolutePath": "@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol",
    "exportedSymbols": {
      "PeriodUtils": [
        24885
      ]
    },
    "id": 24886,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 24760,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:83"
      },
      {
        "id": 24761,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:83"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "file": "../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "id": 24762,
        "nodeType": "ImportDirective",
        "scope": 24886,
        "sourceUnit": 37178,
        "src": "101:68:83",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol",
        "file": "../ACTUSTypes.sol",
        "id": 24763,
        "nodeType": "ImportDirective",
        "scope": 24886,
        "sourceUnit": 23007,
        "src": "171:27:83",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 24764,
          "nodeType": "StructuredDocumentation",
          "src": "200:81:83",
          "text": " @title PeriodUtils\n @notice Utility methods for dealing with Periods"
        },
        "fullyImplemented": true,
        "id": 24885,
        "linearizedBaseContracts": [
          24885
        ],
        "name": "PeriodUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 24767,
            "libraryName": {
              "contractScope": null,
              "id": 24765,
              "name": "BokkyPooBahsDateTimeLibrary",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 37177,
              "src": "316:27:83",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BokkyPooBahsDateTimeLibrary_$37177",
                "typeString": "library BokkyPooBahsDateTimeLibrary"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "310:43:83",
            "typeName": {
              "id": 24766,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "348:4:83",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 24883,
              "nodeType": "Block",
              "src": "572:750:83",
              "statements": [
                {
                  "assignments": [
                    24778
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24778,
                      "mutability": "mutable",
                      "name": "newTimestamp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24883,
                      "src": "582:20:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24777,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "582:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24779,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "582:20:83"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_P_$22474",
                      "typeString": "enum P"
                    },
                    "id": 24784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24780,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24770,
                        "src": "617:6:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                          "typeString": "struct IP memory"
                        }
                      },
                      "id": 24781,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "p",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22490,
                      "src": "617:8:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24782,
                        "name": "P",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22474,
                        "src": "629:1:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                          "typeString": "type(enum P)"
                        }
                      },
                      "id": 24783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "D",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "629:3:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      }
                    },
                    "src": "617:15:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      },
                      "id": 24798,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24794,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24770,
                          "src": "711:6:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                            "typeString": "struct IP memory"
                          }
                        },
                        "id": 24795,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "p",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22490,
                        "src": "711:8:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24796,
                          "name": "P",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22474,
                          "src": "723:1:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                            "typeString": "type(enum P)"
                          }
                        },
                        "id": 24797,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "W",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "723:3:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        }
                      },
                      "src": "711:15:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        },
                        "id": 24814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 24810,
                            "name": "period",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24770,
                            "src": "809:6:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                              "typeString": "struct IP memory"
                            }
                          },
                          "id": 24811,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "p",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22490,
                          "src": "809:8:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 24812,
                            "name": "P",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22474,
                            "src": "821:1:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                              "typeString": "type(enum P)"
                            }
                          },
                          "id": 24813,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "M",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "821:3:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          }
                        },
                        "src": "809:15:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          },
                          "id": 24828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24824,
                              "name": "period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24770,
                              "src": "905:6:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              }
                            },
                            "id": 24825,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "p",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22490,
                            "src": "905:8:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24826,
                              "name": "P",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22474,
                              "src": "917:1:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                "typeString": "type(enum P)"
                              }
                            },
                            "id": 24827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Q",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "917:3:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            }
                          },
                          "src": "905:15:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            },
                            "id": 24844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 24840,
                                "name": "period",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24770,
                                "src": "1005:6:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                  "typeString": "struct IP memory"
                                }
                              },
                              "id": 24841,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "p",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22490,
                              "src": "1005:8:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 24842,
                                "name": "P",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22474,
                                "src": "1017:1:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                  "typeString": "type(enum P)"
                                }
                              },
                              "id": 24843,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "H",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1017:3:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              }
                            },
                            "src": "1005:15:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              },
                              "id": 24860,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24856,
                                  "name": "period",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24770,
                                  "src": "1105:6:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                    "typeString": "struct IP memory"
                                  }
                                },
                                "id": 24857,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "p",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22490,
                                "src": "1105:8:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_P_$22474",
                                  "typeString": "enum P"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24858,
                                  "name": "P",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22474,
                                  "src": "1117:1:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                    "typeString": "type(enum P)"
                                  }
                                },
                                "id": 24859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "Y",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1117:3:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_P_$22474",
                                  "typeString": "enum P"
                                }
                              },
                              "src": "1105:15:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 24874,
                              "nodeType": "Block",
                              "src": "1196:90:83",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "506572696f645574696c732e67657454696d657374616d70506c7573506572696f643a204154545249425554455f4e4f545f464f554e44",
                                        "id": 24871,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1217:57:83",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_c0b610cfb374f1967e641b17d0e2504fae1b6de13a83f9e27bebe5a6f4352ba6",
                                          "typeString": "literal_string \"PeriodUtils.getTimestampPlusPeriod: ATTRIBUTE_NOT_FOUND\""
                                        },
                                        "value": "PeriodUtils.getTimestampPlusPeriod: ATTRIBUTE_NOT_FOUND"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_c0b610cfb374f1967e641b17d0e2504fae1b6de13a83f9e27bebe5a6f4352ba6",
                                          "typeString": "literal_string \"PeriodUtils.getTimestampPlusPeriod: ATTRIBUTE_NOT_FOUND\""
                                        }
                                      ],
                                      "id": 24870,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -19,
                                        -19
                                      ],
                                      "referencedDeclaration": -19,
                                      "src": "1210:6:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 24872,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1210:65:83",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 24873,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1210:65:83"
                                }
                              ]
                            },
                            "id": 24875,
                            "nodeType": "IfStatement",
                            "src": "1101:185:83",
                            "trueBody": {
                              "id": 24869,
                              "nodeType": "Block",
                              "src": "1122:68:83",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24867,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 24861,
                                      "name": "newTimestamp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24778,
                                      "src": "1136:12:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 24864,
                                            "name": "period",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24770,
                                            "src": "1170:6:83",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                              "typeString": "struct IP memory"
                                            }
                                          },
                                          "id": 24865,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "i",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 22488,
                                          "src": "1170:8:83",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 24862,
                                          "name": "timestamp",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24772,
                                          "src": "1151:9:83",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 24863,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "addYears",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36574,
                                        "src": "1151:18:83",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 24866,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1151:28:83",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1136:43:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 24868,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1136:43:83"
                                }
                              ]
                            }
                          },
                          "id": 24876,
                          "nodeType": "IfStatement",
                          "src": "1001:285:83",
                          "trueBody": {
                            "id": 24855,
                            "nodeType": "Block",
                            "src": "1022:73:83",
                            "statements": [
                              {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24853,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 24845,
                                    "name": "newTimestamp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24778,
                                    "src": "1036:12:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 24851,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 24848,
                                            "name": "period",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24770,
                                            "src": "1071:6:83",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                              "typeString": "struct IP memory"
                                            }
                                          },
                                          "id": 24849,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "i",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 22488,
                                          "src": "1071:8:83",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "36",
                                          "id": 24850,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1082:1:83",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "1071:12:83",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 24846,
                                        "name": "timestamp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24772,
                                        "src": "1051:9:83",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 24847,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "addMonths",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 36656,
                                      "src": "1051:19:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 24852,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1051:33:83",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1036:48:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24854,
                                "nodeType": "ExpressionStatement",
                                "src": "1036:48:83"
                              }
                            ]
                          }
                        },
                        "id": 24877,
                        "nodeType": "IfStatement",
                        "src": "901:385:83",
                        "trueBody": {
                          "id": 24839,
                          "nodeType": "Block",
                          "src": "922:73:83",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 24829,
                                  "name": "newTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24778,
                                  "src": "936:12:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 24835,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 24832,
                                          "name": "period",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24770,
                                          "src": "971:6:83",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                            "typeString": "struct IP memory"
                                          }
                                        },
                                        "id": 24833,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "i",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22488,
                                        "src": "971:8:83",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "33",
                                        "id": 24834,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "982:1:83",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_3_by_1",
                                          "typeString": "int_const 3"
                                        },
                                        "value": "3"
                                      },
                                      "src": "971:12:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24830,
                                      "name": "timestamp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24772,
                                      "src": "951:9:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 24831,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "addMonths",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 36656,
                                    "src": "951:19:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 24836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "951:33:83",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "936:48:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24838,
                              "nodeType": "ExpressionStatement",
                              "src": "936:48:83"
                            }
                          ]
                        }
                      },
                      "id": 24878,
                      "nodeType": "IfStatement",
                      "src": "805:481:83",
                      "trueBody": {
                        "id": 24823,
                        "nodeType": "Block",
                        "src": "826:69:83",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 24821,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 24815,
                                "name": "newTimestamp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24778,
                                "src": "840:12:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24818,
                                      "name": "period",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24770,
                                      "src": "875:6:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                        "typeString": "struct IP memory"
                                      }
                                    },
                                    "id": 24819,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "i",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22488,
                                    "src": "875:8:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24816,
                                    "name": "timestamp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24772,
                                    "src": "855:9:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 24817,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "addMonths",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 36656,
                                  "src": "855:19:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 24820,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "855:29:83",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "840:44:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 24822,
                            "nodeType": "ExpressionStatement",
                            "src": "840:44:83"
                          }
                        ]
                      }
                    },
                    "id": 24879,
                    "nodeType": "IfStatement",
                    "src": "707:579:83",
                    "trueBody": {
                      "id": 24809,
                      "nodeType": "Block",
                      "src": "728:71:83",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 24807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 24799,
                              "name": "newTimestamp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24778,
                              "src": "742:12:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24805,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24802,
                                      "name": "period",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24770,
                                      "src": "775:6:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                        "typeString": "struct IP memory"
                                      }
                                    },
                                    "id": 24803,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "i",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22488,
                                    "src": "775:8:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "37",
                                    "id": 24804,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "786:1:83",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_7_by_1",
                                      "typeString": "int_const 7"
                                    },
                                    "value": "7"
                                  },
                                  "src": "775:12:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24800,
                                  "name": "timestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24772,
                                  "src": "757:9:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24801,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "addDays",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36680,
                                "src": "757:17:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 24806,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "757:31:83",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "742:46:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 24808,
                          "nodeType": "ExpressionStatement",
                          "src": "742:46:83"
                        }
                      ]
                    }
                  },
                  "id": 24880,
                  "nodeType": "IfStatement",
                  "src": "613:673:83",
                  "trueBody": {
                    "id": 24793,
                    "nodeType": "Block",
                    "src": "634:67:83",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 24785,
                            "name": "newTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24778,
                            "src": "648:12:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24788,
                                  "name": "period",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24770,
                                  "src": "681:6:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                    "typeString": "struct IP memory"
                                  }
                                },
                                "id": 24789,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "i",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22488,
                                "src": "681:8:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 24786,
                                "name": "timestamp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24772,
                                "src": "663:9:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24787,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addDays",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36680,
                              "src": "663:17:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 24790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "663:27:83",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "648:42:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24792,
                        "nodeType": "ExpressionStatement",
                        "src": "648:42:83"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 24881,
                    "name": "newTimestamp",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24778,
                    "src": "1303:12:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24776,
                  "id": 24882,
                  "nodeType": "Return",
                  "src": "1296:19:83"
                }
              ]
            },
            "documentation": {
              "id": 24768,
              "nodeType": "StructuredDocumentation",
              "src": "359:79:83",
              "text": " @notice Applies a period in IP notation to a given timestamp"
            },
            "id": 24884,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTimestampPlusPeriod",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24770,
                  "mutability": "mutable",
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24884,
                  "src": "475:16:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                    "typeString": "struct IP"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24769,
                    "name": "IP",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22493,
                    "src": "475:2:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IP_$22493_storage_ptr",
                      "typeString": "struct IP"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24772,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24884,
                  "src": "493:17:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24771,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "493:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "474:37:83"
            },
            "returnParameters": {
              "id": 24776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24775,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24884,
                  "src": "559:7:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24774,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "559:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "558:9:83"
            },
            "scope": 24885,
            "src": "443:879:83",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 24886,
        "src": "282:1042:83"
      }
    ],
    "src": "41:1284:83"
  },
  "legacyAST": {
    "absolutePath": "@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol",
    "exportedSymbols": {
      "PeriodUtils": [
        24885
      ]
    },
    "id": 24886,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 24760,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:83"
      },
      {
        "id": 24761,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:83"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "file": "../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "id": 24762,
        "nodeType": "ImportDirective",
        "scope": 24886,
        "sourceUnit": 37178,
        "src": "101:68:83",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol",
        "file": "../ACTUSTypes.sol",
        "id": 24763,
        "nodeType": "ImportDirective",
        "scope": 24886,
        "sourceUnit": 23007,
        "src": "171:27:83",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 24764,
          "nodeType": "StructuredDocumentation",
          "src": "200:81:83",
          "text": " @title PeriodUtils\n @notice Utility methods for dealing with Periods"
        },
        "fullyImplemented": true,
        "id": 24885,
        "linearizedBaseContracts": [
          24885
        ],
        "name": "PeriodUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 24767,
            "libraryName": {
              "contractScope": null,
              "id": 24765,
              "name": "BokkyPooBahsDateTimeLibrary",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 37177,
              "src": "316:27:83",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BokkyPooBahsDateTimeLibrary_$37177",
                "typeString": "library BokkyPooBahsDateTimeLibrary"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "310:43:83",
            "typeName": {
              "id": 24766,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "348:4:83",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 24883,
              "nodeType": "Block",
              "src": "572:750:83",
              "statements": [
                {
                  "assignments": [
                    24778
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24778,
                      "mutability": "mutable",
                      "name": "newTimestamp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24883,
                      "src": "582:20:83",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24777,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "582:7:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24779,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "582:20:83"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_P_$22474",
                      "typeString": "enum P"
                    },
                    "id": 24784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24780,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24770,
                        "src": "617:6:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                          "typeString": "struct IP memory"
                        }
                      },
                      "id": 24781,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "p",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22490,
                      "src": "617:8:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24782,
                        "name": "P",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22474,
                        "src": "629:1:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                          "typeString": "type(enum P)"
                        }
                      },
                      "id": 24783,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "D",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "629:3:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      }
                    },
                    "src": "617:15:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      },
                      "id": 24798,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24794,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24770,
                          "src": "711:6:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                            "typeString": "struct IP memory"
                          }
                        },
                        "id": 24795,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "p",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22490,
                        "src": "711:8:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24796,
                          "name": "P",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22474,
                          "src": "723:1:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                            "typeString": "type(enum P)"
                          }
                        },
                        "id": 24797,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "W",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "723:3:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        }
                      },
                      "src": "711:15:83",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        },
                        "id": 24814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 24810,
                            "name": "period",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24770,
                            "src": "809:6:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                              "typeString": "struct IP memory"
                            }
                          },
                          "id": 24811,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "p",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22490,
                          "src": "809:8:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 24812,
                            "name": "P",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22474,
                            "src": "821:1:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                              "typeString": "type(enum P)"
                            }
                          },
                          "id": 24813,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "M",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "821:3:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          }
                        },
                        "src": "809:15:83",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          },
                          "id": 24828,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24824,
                              "name": "period",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24770,
                              "src": "905:6:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                "typeString": "struct IP memory"
                              }
                            },
                            "id": 24825,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "p",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22490,
                            "src": "905:8:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24826,
                              "name": "P",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22474,
                              "src": "917:1:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                "typeString": "type(enum P)"
                              }
                            },
                            "id": 24827,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Q",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "917:3:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            }
                          },
                          "src": "905:15:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            },
                            "id": 24844,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 24840,
                                "name": "period",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24770,
                                "src": "1005:6:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                  "typeString": "struct IP memory"
                                }
                              },
                              "id": 24841,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "p",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22490,
                              "src": "1005:8:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 24842,
                                "name": "P",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22474,
                                "src": "1017:1:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                  "typeString": "type(enum P)"
                                }
                              },
                              "id": 24843,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "H",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1017:3:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              }
                            },
                            "src": "1005:15:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              },
                              "id": 24860,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24856,
                                  "name": "period",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24770,
                                  "src": "1105:6:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                    "typeString": "struct IP memory"
                                  }
                                },
                                "id": 24857,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "p",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22490,
                                "src": "1105:8:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_P_$22474",
                                  "typeString": "enum P"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24858,
                                  "name": "P",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22474,
                                  "src": "1117:1:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                    "typeString": "type(enum P)"
                                  }
                                },
                                "id": 24859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "Y",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1117:3:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_P_$22474",
                                  "typeString": "enum P"
                                }
                              },
                              "src": "1105:15:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 24874,
                              "nodeType": "Block",
                              "src": "1196:90:83",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "506572696f645574696c732e67657454696d657374616d70506c7573506572696f643a204154545249425554455f4e4f545f464f554e44",
                                        "id": 24871,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1217:57:83",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_c0b610cfb374f1967e641b17d0e2504fae1b6de13a83f9e27bebe5a6f4352ba6",
                                          "typeString": "literal_string \"PeriodUtils.getTimestampPlusPeriod: ATTRIBUTE_NOT_FOUND\""
                                        },
                                        "value": "PeriodUtils.getTimestampPlusPeriod: ATTRIBUTE_NOT_FOUND"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_c0b610cfb374f1967e641b17d0e2504fae1b6de13a83f9e27bebe5a6f4352ba6",
                                          "typeString": "literal_string \"PeriodUtils.getTimestampPlusPeriod: ATTRIBUTE_NOT_FOUND\""
                                        }
                                      ],
                                      "id": 24870,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -19,
                                        -19
                                      ],
                                      "referencedDeclaration": -19,
                                      "src": "1210:6:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 24872,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1210:65:83",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 24873,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1210:65:83"
                                }
                              ]
                            },
                            "id": 24875,
                            "nodeType": "IfStatement",
                            "src": "1101:185:83",
                            "trueBody": {
                              "id": 24869,
                              "nodeType": "Block",
                              "src": "1122:68:83",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24867,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 24861,
                                      "name": "newTimestamp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24778,
                                      "src": "1136:12:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 24864,
                                            "name": "period",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24770,
                                            "src": "1170:6:83",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                              "typeString": "struct IP memory"
                                            }
                                          },
                                          "id": 24865,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "i",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 22488,
                                          "src": "1170:8:83",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 24862,
                                          "name": "timestamp",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24772,
                                          "src": "1151:9:83",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 24863,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "addYears",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36574,
                                        "src": "1151:18:83",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 24866,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1151:28:83",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1136:43:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 24868,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1136:43:83"
                                }
                              ]
                            }
                          },
                          "id": 24876,
                          "nodeType": "IfStatement",
                          "src": "1001:285:83",
                          "trueBody": {
                            "id": 24855,
                            "nodeType": "Block",
                            "src": "1022:73:83",
                            "statements": [
                              {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24853,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 24845,
                                    "name": "newTimestamp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24778,
                                    "src": "1036:12:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 24851,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 24848,
                                            "name": "period",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24770,
                                            "src": "1071:6:83",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                              "typeString": "struct IP memory"
                                            }
                                          },
                                          "id": 24849,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "i",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 22488,
                                          "src": "1071:8:83",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "36",
                                          "id": 24850,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1082:1:83",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "1071:12:83",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 24846,
                                        "name": "timestamp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24772,
                                        "src": "1051:9:83",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 24847,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "addMonths",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 36656,
                                      "src": "1051:19:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 24852,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1051:33:83",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1036:48:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24854,
                                "nodeType": "ExpressionStatement",
                                "src": "1036:48:83"
                              }
                            ]
                          }
                        },
                        "id": 24877,
                        "nodeType": "IfStatement",
                        "src": "901:385:83",
                        "trueBody": {
                          "id": 24839,
                          "nodeType": "Block",
                          "src": "922:73:83",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 24829,
                                  "name": "newTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24778,
                                  "src": "936:12:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 24835,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 24832,
                                          "name": "period",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24770,
                                          "src": "971:6:83",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                            "typeString": "struct IP memory"
                                          }
                                        },
                                        "id": 24833,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "i",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 22488,
                                        "src": "971:8:83",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "hexValue": "33",
                                        "id": 24834,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "982:1:83",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_3_by_1",
                                          "typeString": "int_const 3"
                                        },
                                        "value": "3"
                                      },
                                      "src": "971:12:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24830,
                                      "name": "timestamp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24772,
                                      "src": "951:9:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 24831,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "addMonths",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 36656,
                                    "src": "951:19:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 24836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "951:33:83",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "936:48:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24838,
                              "nodeType": "ExpressionStatement",
                              "src": "936:48:83"
                            }
                          ]
                        }
                      },
                      "id": 24878,
                      "nodeType": "IfStatement",
                      "src": "805:481:83",
                      "trueBody": {
                        "id": 24823,
                        "nodeType": "Block",
                        "src": "826:69:83",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 24821,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 24815,
                                "name": "newTimestamp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24778,
                                "src": "840:12:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24818,
                                      "name": "period",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24770,
                                      "src": "875:6:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                        "typeString": "struct IP memory"
                                      }
                                    },
                                    "id": 24819,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "i",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22488,
                                    "src": "875:8:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24816,
                                    "name": "timestamp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24772,
                                    "src": "855:9:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 24817,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "addMonths",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 36656,
                                  "src": "855:19:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 24820,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "855:29:83",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "840:44:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 24822,
                            "nodeType": "ExpressionStatement",
                            "src": "840:44:83"
                          }
                        ]
                      }
                    },
                    "id": 24879,
                    "nodeType": "IfStatement",
                    "src": "707:579:83",
                    "trueBody": {
                      "id": 24809,
                      "nodeType": "Block",
                      "src": "728:71:83",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 24807,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 24799,
                              "name": "newTimestamp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24778,
                              "src": "742:12:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24805,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24802,
                                      "name": "period",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24770,
                                      "src": "775:6:83",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                        "typeString": "struct IP memory"
                                      }
                                    },
                                    "id": 24803,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "i",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22488,
                                    "src": "775:8:83",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "37",
                                    "id": 24804,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "786:1:83",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_7_by_1",
                                      "typeString": "int_const 7"
                                    },
                                    "value": "7"
                                  },
                                  "src": "775:12:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24800,
                                  "name": "timestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24772,
                                  "src": "757:9:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24801,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "addDays",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36680,
                                "src": "757:17:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 24806,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "757:31:83",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "742:46:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 24808,
                          "nodeType": "ExpressionStatement",
                          "src": "742:46:83"
                        }
                      ]
                    }
                  },
                  "id": 24880,
                  "nodeType": "IfStatement",
                  "src": "613:673:83",
                  "trueBody": {
                    "id": 24793,
                    "nodeType": "Block",
                    "src": "634:67:83",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24791,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 24785,
                            "name": "newTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24778,
                            "src": "648:12:83",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24788,
                                  "name": "period",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24770,
                                  "src": "681:6:83",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                                    "typeString": "struct IP memory"
                                  }
                                },
                                "id": 24789,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "i",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22488,
                                "src": "681:8:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 24786,
                                "name": "timestamp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24772,
                                "src": "663:9:83",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24787,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addDays",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36680,
                              "src": "663:17:83",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 24790,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "663:27:83",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "648:42:83",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24792,
                        "nodeType": "ExpressionStatement",
                        "src": "648:42:83"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 24881,
                    "name": "newTimestamp",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24778,
                    "src": "1303:12:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24776,
                  "id": 24882,
                  "nodeType": "Return",
                  "src": "1296:19:83"
                }
              ]
            },
            "documentation": {
              "id": 24768,
              "nodeType": "StructuredDocumentation",
              "src": "359:79:83",
              "text": " @notice Applies a period in IP notation to a given timestamp"
            },
            "id": 24884,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTimestampPlusPeriod",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24773,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24770,
                  "mutability": "mutable",
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24884,
                  "src": "475:16:83",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IP_$22493_memory_ptr",
                    "typeString": "struct IP"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24769,
                    "name": "IP",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22493,
                    "src": "475:2:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IP_$22493_storage_ptr",
                      "typeString": "struct IP"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24772,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24884,
                  "src": "493:17:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24771,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "493:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "474:37:83"
            },
            "returnParameters": {
              "id": 24776,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24775,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24884,
                  "src": "559:7:83",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24774,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "559:7:83",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "558:9:83"
            },
            "scope": 24885,
            "src": "443:879:83",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 24886,
        "src": "282:1042:83"
      }
    ],
    "src": "41:1284:83"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.295Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "title": "PeriodUtils",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "notice": "Utility methods for dealing with Periods",
    "version": 1
  }
}